2014-10-14 3 views
1

저는 Learn You a Haskell의 IO 장에서 책에 나오는 스크린 샷과 비교하여 Bytestrings이 어떻게 표시되는지 모르는 것을 보았습니다 (아래 예제 참조). 사람들이 다른 제안이 없다면, 적어도 this post과 같은 해결책은 this patch을 설치하는 것 같습니다.하스켈 : 패치를 추가하는 방법?

아마도 이것은 매우 기본적인 질문 일 뿐이지 만 이러한 유형의 패치를 설치하려면 어떻게해야합니까?

ghci에 올바른 ByteString 형식을 표시하는 방법은 물론 다른 제안 사항도 있습니다.


내 설정/시스템 : (하스켈 플랫폼을 통해 설치)

  • ghci 7.6.3
  • 분투 14 (버추얼 박스) ByteStrings가 표시되는 방법

그 책. (참고 : 우리는 저자가 다음 import qualified Data.ByteString.Lazy as B을 포함하는 스크립트를로드한다고 가정 할 수 있습니다.) ByteStrings가 내 컴퓨터에 표시되는 방법을

ghci> B.cons 85 $ B.pack [80,81,82,84] 
Chunk "U" (Chunk "PQRT" Empty) 

:

Prelude> import qualified Data.ByteString.Lazy as B 
Prelude B> B.cons 85 $ B.pack [80,81,82,84] 
"UPQRT" 
+3

이 패치는 파생 된 인스턴스 인 '표시'에서 손으로 쓴 인스턴스로 이동하는 방법을 보여주기위한 것입니다. 기본적으로 LYAH에서 사용하는 버전은 사용중인 버전보다 오래되어 사용중인 버전이 정확합니다. 새로운 동작은 기본 데이터 생성자가 아닌 일반 문자열 인 것처럼 바이트 문자열을 인쇄하는 것입니다. 이것은 ByteString을'String' 리터럴로 쓸 수 있도록 해주는'OverloadedStrings' 확장과 정렬하는 것이 좋습니다. – bheklilr

+0

오케이. 글쎄, 특정 Lazy ByteString 컴파일러에 의해 생성 된 특정 Chunk를 볼 방법이 있습니까? – iceman

+0

또한 답변을 게시 해주십시오. :) – iceman

답변

4

당신이 참조하고 패치는 차이를 보여주고있다 새 버전에서 손으로 작성한 Show 인스턴스를 사용하는 구형 및 최신 버전의 바이트 테스트 사이에 설치하지 않아야합니다. LYAH가 여기저기서 약간의 업데이트가 필요합니다 (하스켈 개발은 지난 몇 년 동안 꽤 빨리 움직였습니다).

ByteString 생성자는 실제로 비공개로 설정되었으므로 직접 사용할 수 없습니다. 이 때문에 Show 인스턴스는 을 출력해야 ByteString으로 되돌릴 수 있으며 가장 쉬운 방법은 pack 또는 OverloadedStrings 확장자를 사용하는 것입니다.

에는 toChunks 함수가 있지만 정확히 무엇을 원하는지 잘 모르겠습니다. 기본적으로 ByteString 구현을 비공개로 간주하고 내 보낸 라이브러리 함수 만 사용하여 사용자가 아무 것도 손상시키지 않도록해야합니다. 이것은 Data.Map.Map의 내부를보고 싶을 때와 동등 할 것입니다.