2
모나드 가져 오기에서 약간의 비트를 읽어야합니다. 이제 내 코드모나드 가져 오기 모나드 가져 오기
나는 상태 모나드의 일종으로이 포장 할readBits :: Int -> Int -> Get (Word32, Int)
readBits count state = ...
readValue :: Get (Word32, Word32)
readValue = do
-- read fst bit count
(bits1, s0) <- readBits 5 0
-- read bits1 bits as fst
(fst, s1) <- readBits bits1 s0
-- read snd bit count
(bits2, s2) <- readBits 5 s1
-- read bits2 bits as snd
(snd, s3) <- readBits bits2 s2
-- flush incomplete byte
when (s3 /= 0) $ skip 1
return (fst, snd)
처럼 보이는
readBits :: Int -> BitReader Word32
readBits count = ...
runBitReader :: BitReader a -> Get a
readValue :: Get (Word32, Word32)
readValue = runBitReader $ do
bits1 <- readBits 5
fst <- readBits bits1
bits2 <- readBits 5
snd <- readBits bits2
return (fst, snd)
과 같은 코드가 어떻게 기능을 구현해야해야 하는가? 어떻게 구현해야합니까?
나는 Get과 BitGet 소스 코드를 살펴 보았지만, 무슨 일이 일어나는지 완전히 이해하지 못했다.