Bru*_*rry 1 haskell applicative
我正在阅读一些Haskell教程,并尝试熟悉该语言.我在Monad/MonadPlus教程中看过这个例子:
data Sheep = Sheep {name :: String, mother :: Maybe Sheep, father :: Maybe Sheep}
parent :: Sheep -> Maybe Sheep
parent s = mother s `mplus` father s
Run Code Online (Sandbox Code Playgroud)
我试图用无点样式重写它(就像一个练习,不是说上面是错误的或非惯用的),但我卡住了:显然我可以写一个自定义函数
partialPlus :: (MonadPlus m) => (a -> m b) -> (a -> m b) -> a -> m b
partialPlus f1 f2 = \x -> f1 x `mplus` f2 x
Run Code Online (Sandbox Code Playgroud)
然后使用
parent = partialPlus mother father
Run Code Online (Sandbox Code Playgroud)
但我似乎从LYAH教程中记得,有一种方法可以使用仿函数或应用仿函数来构造计算树,最终可以提供参数以从"仿函数盒"中获取结果.但是我似乎无法在教程中找到该示例.我如何"巧妙地"重写上述内容?
使用Applicative实例进行功能:
parent :: Sheep -> Maybe Sheep
parent = mplus <$> mother <*> father
Run Code Online (Sandbox Code Playgroud)