【发布时间】:2016-06-28 14:38:16
【问题描述】:
我想在 SML 中实现 Option Monad,所以我可以像在 haskell 中一样使用它们。我所做的,不起作用。
infix 1 >>=
signature MONAD =
sig
type 'a m
val return : 'a -> 'a m
val >>= : 'a m * ('a -> 'b m) -> 'b m
end;
structure OptionM : MONAD =
struct
type 'a m = 'a option
val return = SOME
fun x >>= k = Option.mapPartial k x
end;
val x = OptionM.return 3;
x (OptionM.>>=) (fn y => NONE);
结果:
stdIn:141.1-141.31 Error: operator is not a function [tycon mismatch]
operator: int OptionM.m
in expression:
x OptionM.>>=
我该怎么做才能使最后一行正常工作?
【问题讨论】:
-
这是一个solution - 只是
open OptionM。 -
或
val op >>= = OptionM.>>=。