람다 함수의 응용 펑터를 테스트하고 있지만 아래 코드로 작성했습니다. 'myAddition가'랜덤에 '의 총 누적 취할 필요 : 그러나 나는 펑터를 배우고, 내가 아래의 작업을 수행하는 더 나은 방법이 감사람다 식, 비 한정적인 패턴 내의 적용 펑터?
을 그래서 이것은 관련
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