에서 ByteString의 indvidual 요소로 작업 할 base
의 값에 따라 subtrie가 다른의 트라이에 삽입됩니다는 어떻게 다음과 같은 유형의 함수를 작성해야 내가 하스켈
replaceSubtrie :: SSTrie -> Data.Word.Word8 -> SSTrie -> SSTrie
replaceSubtrie trie base subtrie = ???
방법. SSTrie는 내 자신의 데이터 형식이며이를 사용하는 방법을 알고 있지만 Word8 값을 처리하는 방법을 알지 못합니다.
base
은 ByteString에서 가져온 단일 "문자"(특정 "문자"값)입니다. 특히, ByteString에 index
을 호출 한 결과입니다. 이것이 내가 Word8로 선언 한 유일한 이유입니다.
사용할 수있는 Word8 생성자가 없기 때문에 패턴 일치를 수행 할 수 없습니다. 그리고 Word8 상수를 비교하는 방법을 모르기 때문에 경비원을 배치 할 수 없습니다.
[편집] 제롬의 suggestiong 일했다. 하지만 더 일반적으로 Bytestring (및 다른 저수준 데이터)을 사용하는 방법을 보여주는 좋은 기사가 있습니까? 마찬가지로 Word8에 대한 사실을 어떻게 알았습니까? -
나는이로 변경하는 경우 [편집 돈 스튜어트에 대한 질문]
은 지금 나는이
replaceSubtrie trie 0x41 subtrie = trie{ a=subtrie }
과 같은 코드로 작업있어 :
replaceSubtrie trie 'A' subtrie = trie{ a=subtrie }
오류가 발생합니다.
Trie.hs:40:21:
Couldn't match expected type `Word8' with actual type `Char'
In the pattern: 'A'
In an equation for `replaceSubtrie':
replaceSubtrie trie 'A' subtrie = trie {a = subtrie}
내 파일 맨 위에 import qualified Data.ByteString.Char8 as C
이 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까?
워드 8은 부호없는 8 비트 값입니다. 또한 Num, Bounded, Eq, Ord ... 등으로 0에서 255까지 고려할 수 있습니다 (http://hackage.haskell.org/packages/archive/base/4.6.0.0/doc/html/Data-Word). .html) 그래서 당신은 patterm match를 사용할 수 있어야합니다. – Jerome
고마워, 제롬. 나는 'A'에 대한 ASCII 값을 약간 어리 석음으로 보았지만, 대체 무엇을 원했던가. – JonathanZ
http://www.haskell.org/haskellwiki/DealingWithBinaryData도 참조하십시오. –