ラムダ関数の応用ファンクタをテストしていますが、私が書いた以下のコードが残っています。 「myAddition」「はランダム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
あるので、しかし、私はファンクタを学んでいる、以下を行うには良い方法があるに感謝しますエラー:
エラーが何を意味するのか理解していますが、アプリケーションファンクタのラムダを網羅的にする方法がわかりません。
instance Applicative Random where
pure a = Random a
(Random f) <*> (Random a) = Random (f a)
_ <*> _ = Nill
まず、フォーマットf (a -> b) <*> f a)
に持ち込むとRandom (f a)
として最初のケースのために結果を定義します。
それが何をすべき? –
あなたは 'Applicative Random'インスタンスの'(<*>)Nill'を処理していません。 –
あなたの 'ランダム'タイプは、おそらく偽装しているかもしれません。 – chepner