SML:使用 isSome 的函数组合
SML: Function composition with 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
SOME 和 my_converter return 都是一个选项,但是当我执行以下操作时
- 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
为什么会出现类型错误?
错误消息告诉您 o
想要一个函数操作数,但它实际得到的是一个 option
。这是因为 isSome o SOME x
解析为 isSome o (SOME x)
,这是没有意义的。
你可以通过写
来解决这个问题
(isSome o SOME) x
相反。
我有以下示例,即使类型相互匹配,它们也不起作用
- 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
SOME 和 my_converter return 都是一个选项,但是当我执行以下操作时
- 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
为什么会出现类型错误?
错误消息告诉您 o
想要一个函数操作数,但它实际得到的是一个 option
。这是因为 isSome o SOME x
解析为 isSome o (SOME x)
,这是没有意义的。
你可以通过写
来解决这个问题(isSome o SOME) x
相反。