【发布时间】:2016-10-10 09:07:56
【问题描述】:
我正在测试 lambda 函数中的应用函子,但我坚持使用我编写的以下代码。 'myAddition' 需要取'Random a' 的累计总数:
我很欣赏下面有更好的方法,但是我正在学习函子,所以这是相关的
data Random a = Nill | Random a deriving (Show, Ord, Eq)
randomOrNot = [Nill, Random 22, Random 101, Nill, Random 44]
instance Functor Random where
fmap f (Nill) = Nill
fmap f (Random a) = Random (f a)
instance Applicative Random where
pure a = Random a
(<*>) (Random a) = fmap a
cumulativeTotal :: [Random a] -> Random a
cumulativeTotal li = foldr (\el acc -> (pure (+) <*> el) <*> acc) (Random 0) li
main = do
print $ cumulativeTotal randomOrNot
错误:
"Non-exhaustive patterns in function <*>"
我了解错误的含义,但是我不确定如何使应用函子 lambda 详尽无遗?
【问题讨论】:
-
应用到Nill上应该怎么办?
-
您没有在
Applicative Random实例中处理(<*>) Nill的情况。 -
你的
Random类型只是Maybe的伪装。
标签: haskell lambda applicative