私は F# のモナド (別名計算式) をいじっていましたが、次の単純な Identity モナドを書きました。
type Identity<'a> =
| Identity of 'a
type IdentityBuilder() =
member x.Bind (Identity v) f = f(v)
member x.Return v = Identity v
let identity = new IdentityBuilder()
let getInt() = identity { return Int32.Parse(Console.ReadLine()) }
let calcs() = identity {
let! a = getInt() // <- I get an error here
let! b = getInt()
return a + b }
マークされた行に表示されるエラーがわかりません:
この式は Identity<'a> 型を持つことが期待されていましたが、ここでは 'b * 'c 型になっています
getInt() は明らかに type の値であるため、これは意味がないと思いますIdentity<'a>
。
誰が私が間違っているのか教えてもらえますか?