2012-11-19 2 views
2

에서 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이 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+2

워드 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

+0

고마워, 제롬. 나는 'A'에 대한 ASCII 값을 약간 어리 석음으로 보았지만, 대체 무엇을 원했던가. – JonathanZ

+0

http://www.haskell.org/haskellwiki/DealingWithBinaryData도 참조하십시오. –

답변

1

I feel a bit silly looking up the ASCII value for 'A', but what the hell

당신은 단순히 Data.ByteString.Char8 또는 Data.ByteString.Lazy.Char8를 가져올 수는 모두 동일한 기능을 얻을 수 있지만, 패턴의 문자 리터럴의 사용을 허용합니다.

+0

이 작업을 수행 할 수는 있지만 그렇게하면 냄새가 나빠서 뭔가 잘못 됐을 수 있습니다. 'Char8'은 위험하다 – singpolyma

+1

바이너리 데이터의 편의 접근 자로 사용해야한다. 그것이 내가 그것을 쓴 이유입니다. –

+0

분명히 할 수 있겠습니까? 맨 위로 질문에 대한 자세한 내용을 추가했습니다. stackexchange가 대화를 구조화하는 방법을 잘 모르겠습니다. – JonathanZ

관련 문제