Я хочу реализовать Option Monad в SML, поэтому я могу использовать их так же, как они могут использоваться в haskell. То, что я сделал, не работает.SML Option Monad (оператор связи не работает)
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.>>=
Что я могу сделать, чтобы сделать последнюю работу линии?
Вот один [решение] (http://stackoverflow.com/a/ 14129095/2747511) - просто 'open OptionM'. –
Или 'val op >> = = OptionM. >> ='. –