Haskell 如何使用状态单子重构代码,通过添加更多函数来增加模块性?
我正在努力掌握单子的诀窍。我想和州单子一起玩是个好习惯 从以下位置使用UART接收: 我认为有一个功能 我错过了 我想做点像Haskell 如何使用状态单子重构代码,通过添加更多函数来增加模块性?,haskell,monads,record,clash,Haskell,Monads,Record,Clash,我正在努力掌握单子的诀窍。我想和州单子一起玩是个好习惯 从以下位置使用UART接收: 我认为有一个功能 我错过了 我想做点像 newFun = when (not _rx_busy && _rx_d2 == 0) $ do rx_busy .= True rx_sample_cnt .= 1 rx_cnt .= 0 我想我需要一个类似于execState的函数 所以我的问题是 我应该用什么 该函数
newFun = when (not _rx_busy && _rx_d2 == 0) $ do
rx_busy .= True
rx_sample_cnt .= 1
rx_cnt .= 0
我想我需要一个类似于execState
的函数
所以我的问题是
- 我应该用什么李>
- 该函数做了什么,允许它与其他函数组合
- 如果monad只是在编写,为什么我不能在没有execState类型函数的函数中使用
when
- 我还可以用什么方法来提高代码的模块化程度李>
- 在您对
newFun
您正试图引用newFun = when (not _rx_busy && _rx_d2 == 0) $ do rx_busy .= True rx_sample_cnt .= 1 rx_cnt .= 0
和\u rx\u busy
,它们是\u rx\u d2
类型的记录字段。在RxReg
中,第一个参数是uartRX
,RecordWildCards语言扩展用于通过将参数与模式RxReg
匹配来绑定所有字段名。因此,您需要将RxReg{..}
本身传递,或者至少将r
和\u rx\u busy
从\u rx\u d2
传递到uartRX
;i、 要么有newFun
或newFun busy d2 = when (not busy && d2 == 0) $ do ...
在您对newFun
您正试图引用newFun = when (not _rx_busy && _rx_d2 == 0) $ do rx_busy .= True rx_sample_cnt .= 1 rx_cnt .= 0
和\u rx\u busy
,它们是\u rx\u d2
类型的记录字段。在RxReg
中,第一个参数是uartRX
,RecordWildCards语言扩展用于通过将参数与模式RxReg
匹配来绑定所有字段名。因此,您需要将RxReg{..}
本身传递,或者至少将r
和\u rx\u busy
从\u rx\u d2
传递到uartRX
;i、 要么有newFun
或newFun busy d2 = when (not busy && d2 == 0) $ do ...
newFun RxReg{..} = when (not _rx_busy && _rx_d2 == 0) $ do ...