좋은 하루.텍스트 또는 Bytestring
내가 지금 하스켈에 관해 싫어하는 한 가지는 문자열로 작업하기위한 패키지의 양입니다.
처음에는 고유 한 Haskell [Char]
문자열을 사용했지만, hackage 라이브러리를 사용하기 시작했을 때 무한 변환으로 완전히 손실되었습니다. 모든 패키지는 다른 문자열 구현을 사용하는 것처럼 보이고 일부는 자체 수제를 채택합니다.
다음 나는 기능의 넓은 세트를 가지고 있기 때문에 내가 Text
를 선택, Data.Text
문자열과 OverloadedStrings
확장자로 내 코드를 재 작성하지만, 많은 프로젝트가 ByteString
을 선호하는 것 같다.
누군가가 짧은 이유를 사용하여 왜 다른 것을 사용하게 할 수 있습니까?
PS : btw에서 ByteString
으로 변환하는 방법은 무엇입니까?
Couldn't match expected type Data.ByteString.Lazy.Internal.ByteString against inferred type Text Expected type: IO Data.ByteString.Lazy.Internal.ByteString Inferred type: IO Text
내가 Data.Text.Encoding
에서 encodeUtf8
을 시도,하지만 운 :
Couldn't match expected type Data.ByteString.Lazy.Internal.ByteString against inferred type Data.ByteString.Internal.ByteString
UPD : 응답
감사합니다, 그 * 덩어리 선 (善) 갈 방법처럼 보이지만 나는 다소 충격 그 결과 원래의 기능은 다음과 같습니다.
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
그리고 이제되었다 :
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t
그리고 네 우리가 그것에 Text
를 제공 할 경우,이 기능은, 그 잘못 때문에 작동하지 않습니다, 우리가 사용하는이 텍스트가 제대로 인코딩 자신감과 준비가 그것을 변환 어리석은 일이지만, 그런 장황한 전환은 여전히 htmltoItems
외부의 어딘가에서 일어나야 만합니다.
하스켈 사람들은 통일 된 문자열을 가지고 있습니다 :) – Ankur
@Ankur :'Text'는 사실상의 텍스트 구현이되고 있습니다. 문자열은 기존의 이유와 단순한 사유 때문에 여전히 존재하지만 심각한 텍스트 조작을 위해서는 텍스트를 사용해야합니다. – ivanm
@ivanm : 모든 레거시 bytestring 기반 라이브러리 만 변환으로 변환 할 수 있습니다! –