【.NET】F#について語れ【OCAML】
■ このスレッドは過去ログ倉庫に格納されています
0022名無しさん♯
2007/08/02(木) 18:16:21#light
type State<'s, 'a> = ST of ('s -> ('a * 's))
with
static member Run (ST x) = x
static member Get () = ST <| fun s -> (s, s)
static member Put s = ST <| fun _ -> ((), s)
static member Eval x = State.Run x >> fst
static member Exec x = State.Run x >> snd
type StateBuilder () =
member b.Return a = ST <| fun s -> (a, s)
member b.Bind (ST x, f) = ST <| fun s -> let (a, s') = x s in State.Run (f a) s'
member b.Let (x, f) = f x
let state = StateBuilder ()
let _ =
state
{ let x = 100
let! s = State.Get ()
do! State.Put (x + s)
return () }
|> State.Exec <| 1000
|> (print_any >> print_newline)
(実行結果)
1100
■ このスレッドは過去ログ倉庫に格納されています