昨天我读了一些关于monad的东西。我一点也不理解它,但这不会阻止我尝试使用它。in this question的一些答案确实推动了monad的存在,使事情变得更好,更具可读性。“Haskell对monad有很好的支持”,这是否意味着我可以写很好的代码,例如,可能是开箱即用?
或者这是否意味着我可以为maybe类型编写代码,使其易于使用。
我遇到了以下问题时,做降临的代码:
将两个Maybe中的值加1,然后将它们相乘。
在阅读question on multiplying two maybes并检查了typeclassopedia之后,我到达了(在一些严重的挠头之后):
let test = Just (*) <*> ((+1) <$> marker1Pos) <*> ((+1) <$> marker2Pos)
它起作用了,但对我来说,这看起来不太理想。
我可以用我在第一个链接中读到的do块来做吗?
2条答案
按热度按时间ego6inou1#
当然,你可以用
do
来做。对于您编写的版本,我也倾向于使用
liftM2
或liftA2
,对于节,我也倾向于使用fmap
而不是<$>
。您可能会或可能不会觉得这更有吸引力,但我提供它以防万一:qjp7pelc2#
您可以在以下位置使用**
on :: (b -> b -> c) -> (a -> b) -> a -> a -> c
**: