는 내가 Writer
모나드를 공부하고 다음과 같은 한 :Writer 모나드와 기능 구성?
myFunction :: Int -> Int -> Writer String Int
myFunction e1 e2
| e1 > e2 = do
tell ("E1 greater")
return (e1)
| otherwise = do
tell ("E2 greater")
return (e2)
main = do
-- execWriter :: Writer w a -> w
print $ execWriter . myFunction 1 2
오류 :
"Couldn't match type ‘WriterT String Data.Functor.Identity.Identity Int’with ‘a0 -> Writer c0 a1’
Expected type: a0 -> Writer c0 a1
Actual type: Writer String Int"
않는 이유는 무엇 .
하지 $
이 계산 오류? 아마도 기능 구성에 대한 나의 이해가 잘못되었을 수 있습니까?
' (.) :: (b -> c) -> (a -> b) -> a -> c'연산자는 각각 하나의 인수를 취하는 두 개의 함수를 기대하며, 오른쪽의 'myFunction' 적어도 execWriter가 기대하는 것). –
'(. :) = (.)을 정의 할 수도 있습니다. (.)'그리고 나서,'execWriter. : myFunction $ 1 2'을 사용하십시오. "올빼미 연산자"라고도합니다. ('(. :)'은 이미'Data.Composition'에 정의되어 있습니다 - http://hackage.haskell.org/package/composition-1.0.2.1/docs/Data-Composition.html) – zeronone