假設我有如下定義的數據類型:如何兩個簡單的鏡頭,結果合併成一個
data Register = Register { _reg_h :: Word8
, _reg_l :: Word8
}
makeLenses ''Register
現在,如果我想定義焦點從Register
到Word16
一個鏡頭。這個功能應該是一些象下面這樣:
refer :: Lens' Register Word16
refer = do h <- reg_h
l <- reg_l
return $ (fromEnum h `shiftL` 8) .&. fromEnum l
(Word8
,Word16
,shiftL
,並.&.
從Data.Word
和Data.Bits
,我已經在我的源代碼開始啓用RankNTypes
)
然而,這代碼根本不起作用。我想這可能是因爲完整的Lens
類型定義有四個類型參數,並且這會比簡單的Lens'
更簡單,以充當簡單的Monad
。
那麼以什麼方式可以達到上述效果呢?
謝謝。
寄存器類型可能包含設置地址時要保留的其他字段。在這種情況下,iso不適用於此。我可以用類似的方式定義一個鏡頭嗎? – 2014-10-05 10:30:36