2017-05-01 9 views
0

와 기능 성분 I 다음 예제를 가지고 있고 그들은 유형이 서로SML : isSome

- isSome; 
val it = fn : 'a option -> bool 


- SOME; 
val it = fn : 'a -> 'a option 
- val my_converter = (fn x => if x = 5 then SOME x else NONE); 
val my_converter = fn : int -> int option 

모두 일부와 대결 않고 옵션을 반환 my_converter하더라도 작동하지 않지만 내가 할 때

다음
- fn x => isSome o SOME x; 
stdIn:19.9-19.24 Error: operator and operand don't agree [tycon mismatch] 
    operator domain: ('Z option -> bool) * ('Y -> 'Z option) 
    operand:   ('Z option -> bool) * 'X option 
    in expression: 
    isSome o SOME x 

왜 유형 오류가 발생합니까?

+0

'isSome o SOME'이 모든 입력에 대해 'true'를 반환하기 때문에, 나는 그것을 사용하는 동기가 보이지 않습니다. –

+0

그건 내가 가장 일반적인 패턴을 보여주기 위해 사용할 수있는 빌트인의 가장 간단한 예제이다. 당신은 조건 기반의 SOME/NONE 쌍과 어떤 조합인가? – Har

답변

1

o에 함수 피연산자가 필요하지만 실제로 얻는 것은 option이라는 오류 메시지가 표시됩니다. isSome o SOME xisSome o (SOME x)으로 구문 분석하기 때문에 이는 의미가 없습니다.

는 대신

(isSome o SOME) x 

를 작성하여이 문제를 해결할 수 있습니다.