2016-08-09 2 views
1

나는 내 업데이트 기능 중 하나에 아마 - 값 랩을 해제해야합니다느릅 나무 Maybe.withDefault

update msg model = 

    case msg of 

    UpdateMainContent val -> 
     Maybe.withDefault 100 (Just 42) 
     model 

물론 이것은 더미 코드와

Maybe.withDefault 100 (Just 42) 

는 바로 꺼내어 documentation for Maybe 실제로 아무것도 수행하지 않아야합니다. 컴파일러는 불평 말하고있다 :

Detected errors in 1 module. 


-- TYPE MISMATCH ----------------------------------- ./src/Review/Form/State.elm 

The 1st argument to function `withDefault` is causing a mismatch. 

15|>    Maybe.withDefault 100 (Just 42)) 
16|    -- Maybe.withDefault 100 (model.activeItem) 
17|    model 

Function `withDefault` is expecting the 1st argument to be: 

    a -> b 

But it is: 

    number 

가 왜 그것이에서

a -> Maybe a -> a 

로 정의 할 때 "withDefault는"

a -> b 

가 될 첫 번째 인수를 기대하고 있다고 말하고있다 선적 서류 비치?

+0

이 보이는에 평가합니다. '(Maybe.withDefault 100 (Just 42)) '를 래핑하거나 예제에 코드를 추가하십시오. – halfzebra

+0

@halfzebra 정확히 똑같은 오류를줍니다. 크고, 중첩되어 있고 모듈 식이어서 전체 코드 경로를 붙여 넣기를 원하지는 않습니다. 그러나 "val"은 그냥 들어오는 문자열이라고 말할 수 있습니다. 그래서 위의 코드 밖에서 오류가 발생하는 구문 오류가있을 수 있습니다. 아픈 내 질문을 조금 명확히하려고합니다. – swelet

답변

7

는 실수로 model에 남아 :

UpdateMainContent val -> 
    Maybe.withDefault 100 (Just 42) 
    model -- <-- here 

이는 형식 유추 알고리즘을 만드는 Maybe.withDefault 100 (Just 42)model 인수를 할 수있는 기능을 평가해야한다고 생각합니다. 이를 이해하기 위해 10042이 함수가 될 것으로 기대하지만 그렇지 않으므로 알려줍니다.

그것은이 작품 여기서 예를 보려면 도움이 될

는 :

f : Int -> Int 
f x = x + 1 

Maybe.withDefault identity (Just f) 0 

이 코드에서 몇 가지 이상한 구문 오류를 가지고 컴파일러가 인식하지 못하는 것처럼 1.

+0

쇠렌 감사합니다! 이것을 피하기 위해 어떻게 다시 쓸 수 있습니까? 그냥 parens에 포장 : (Maybe.withDefault 100 (Just 42)) 같은 오류를 제공합니다! – swelet

+1

'model'을 사용하여 줄을 지우시겠습니까? –

+0

"모델"을 반환하려면 사례가 필요합니다. 나는 여기서 뭔가를 놓치고 있다고 생각한다. (함수형 프로그래밍에 익숙하지 않다.) 어떤 경우를 반환하기 전에 임의의 코드를 실행할 수 있습니까? – swelet

관련 문제