2017-10-04 23 views
1

그냥 지금 하스켈의 모나드에 소개되고 >>으로로드 블록의 무언가를 친다.하스켈에서 >>의 정확한 사용법

>>= 내가 서곡에서 다음 얻을 수있는, 나에게 의미가 있습니다 :

Prelude> Just 1 >>= (\ x -> Just (x+1)) 
Just 2 

나의 이해는 >> 바인드와 동일하지만 단지 기능에 관해서 일정 할 때 사용하는 것입니다 그 매개 변수. 내가하려고 할 때하지만 그 서곡에해야 할 일 : 나는 정말이 오류 메시지를 해독하기 위해 사투를 벌인거야

Prelude> Just 1 >> (\_ -> Just 10) 

<interactive>:7:12: error: 
• Couldn't match expected type ‘Maybe b’ 
       with actual type ‘t0 -> Maybe Integer’ 
• The lambda expression ‘\ _ -> Just 10’ has one argument, 
    but its type ‘Maybe b’ has none 
    In the second argument of ‘(>>)’, namely ‘(\ _ -> Just 10)’ 
    In the expression: Just 1 >> (\ _ -> Just 10) 
• Relevant bindings include 
    it :: Maybe b (bound at <interactive>:7:1) 

... 사람이 >>의 적절한 사용에 도움을 줄 수? 그리고 그것에 대해 나는 무엇을 이해하지 못합니까?

+0

'이미 요인 음 >>'이후 그 '\ _ ->'당신이 명시 적으로 작성할 필요가 없습니다. –

답변

2

(>>=)Monad m => m a -> (a -> m b) -> m b입니다. 귀하의 예에서 mMaybe이므로 Maybe IntInt -> Maybe Int을 제공하십시오.

(>>)Monad m => m a -> m b -> m b 그래서 당신이 Maybe b 예를 들어, 반환하는 함수 대신 Maybe b을 통과해야 입력이 첫 번째 값이 Nothing 경우이 Just 10과 동일이 경우

Just 1 >> Just 10 

그러나 결과는 Nothing 될 것입니다 : 첫 번째 값이 어떤 효과를 나타내는 경우가 일반적 (>>)를 사용합니다

Nothing >> Just 10 

결과를 수행하고 무시하려면 예 : IO.

putStrLn "Hello world" >> pure 10 :: IO Int 

또는 State :

put "state" >> pure 10 :: State String Int 
+0

고마워요! 이 질문 자체가 완전한 질문을 필요로한다면 죄송 합니다만 정확히 달성 할 수있는 것은 무엇입니까? 단지'Just 1 >> Just 10'이 제공하는 용도는 무엇입니까? –

+0

@ TheHelpfulBees - 업데이트를 참조하십시오. – Lee

+0

@TheHelpfulBees,'아마도'아마'>>'에 대해 생각하기에 좋은 예제가 아닙니다. 'State s','Writer w','IO'에서 무엇을하는지에 대해 생각하지 못하게 될 수도 있습니다. 일단 패턴을 이해하면, "더러운", "더 어리석은 사촌", 그리고 "독자 e"와 "신원"에 훨씬 더 흥미로운 방식으로 적용된다는 것을 알 수 있습니다. – dfeuer