2016-09-21 5 views
1

현실 세계에서 모나드에 대한 장 읽기. 나는 do 표기법의 desugaring을 우연히 만났습니다. 특히 pattern <- action과 같은 것을 가지고있을 때 말이죠.모나드 desugaring haskell

-- file: ch14/Do.hs 
translated3 = 
    let f pattern = do act2 
        {- ... etc. -} 
        actN 
     f _  = fail "..." 
     in act1 >>= f 

나는 문제가 이해 당신이 let 절에 두 개의 패턴 매칭의 경우를 할 수있는 방법입니다 데 :

-- file: ch14/Do.hs 
doNotation3 = 
    do pattern <- act1 
    act2 
    {- ... etc. -} 
    actN 

위의 예

은에 desugared입니까?

동일한 let 절에 f patternf _을 어떻게 가질 수 있는지 이해가되지 않습니다. let 절에서 패턴 일치를 여러 개 가질 수 있는지 살펴 보았습니다.하지만 필자가 보았던 것에서는 대부분의 사람들이 case 문을 사용합니다.

나는 실제로 여기서 무슨 일이 일어나는지 이해하는데 도움이 필요합니까?

+0

은 F = (\ 경우 패턴하자 '하는 것과 같습니다 당신이 where로 변환하는 경우

은 아마 조금 더 쉽게 얻는다 act1 >> = f'에서 실패한 "..."). –

답변

3

let 절에서 두 패턴 일치 사례를 가질 수있는 방법이 무엇입니까? 글쎄, 당신은 할 수

:

example :: Int -> Int 
example n = 
    let f 0 = 1 
     f x = x * f (x - 1) 
    in f n 

이 기억은, 그건 let … in… 표현하지 dolet입니다. 그리고 그러한 표현식의 모든 바인딩에 대해 (거의) 일반적인 최상위 표현식과 동일한 규칙이 적용됩니다 (예 : 패턴 일치를 사용할 수 있습니다. ...;> ACT2 {할 -

람다의 경우와
example :: Int -> Int 
example n = f n 
    where    
     f 0 = 1 
     f x = x * f (x - 1) 
+7

"그게 기억에 남는 거라구. 표현에,하지 말자."할 일은이 점에서 전혀 다르지 않을 것이다. – sepp2k