SMLでOption Monadを実装したいので、それらをhaskellで使用するのと同じ方法で使用できます。私がしたことはうまくいかない。SMLオプション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.>>=
私は最後の行を動作させるために何ができますか?
は1 [ソリューション](http://stackoverflow.com/a/です:あなたは、右の各
fn
をparenthesiseする必要があるためこれは、ラムダと>>=
の連鎖いくつかの用途に、それはやや面倒になります14129095/2747511) - 単に 'optionM'を開きます。 –または 'val op >> = = OptionM。>> ='。 –