좋은 날.
내가 지금 Haskell에 대해 싫어하는 것은 문자열 작업을위한 패키지의 양입니다.
처음에는 네이티브 Haskell [Char]
문자열을 사용했지만 해킹 라이브러리를 사용하려고했을 때 끝없는 변환으로 완전히 잃었습니다. 모든 패키지는 다른 문자열 구현을 사용하는 것처럼 보이며 일부는 자체 수작업을 채택합니다.
다음으로 Data.Text
문자열과 OverloadedStrings
확장자로 코드를 다시 작성 했습니다 Text
. 더 넓은 함수 세트를 가지고 있기 때문에 선택 했지만 많은 프로젝트에서 ByteString
.
누군가가 왜 하나 또는 다른 것을 사용 해야하는지 짧은 추론을 줄 수 있습니까?
PS : BTW 어떻게 변환하는 방법 Text
에 ByteString
?
예상 유형 Data.ByteString.Lazy.Internal.ByteString 을 유추 된 유형 텍스트 와 일치시킬 수 없습니다. 예상 유형 : IO Data.ByteString.Lazy.Internal.ByteString 유추 된 유형 : IO 텍스트
encodeUtf8
에서 시도 Data.Text.Encoding
했지만 운이 없습니다.
유추 된 유형 Data.ByteString.Internal.ByteString 에 대해 예상 유형 Data.ByteString.Lazy.Internal.ByteString 을 일치시킬 수 없습니다.
UPD :
* Chunks goodness가 갈 길처럼 보이지만 결과에 다소 충격을 받았으며 원래 기능은 다음과 같습니다.
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
.