我一直在單子在F#玩弄(又名計算式)和我寫了這個簡單的身份單子:自定義的計算式
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 }
我不明白,我得到的錯誤標記線:
這表達預計將有類型的身份<「一>但這裏的類型是」 b *「C
我覺得這是沒有意義的getInt()我s顯然是Identity<'a>
類型的值。
誰能告訴我我做錯了什麼?
或請參閱語言規範的第6.4.10節: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html – Brian 2009-12-16 21:00:40
注意自我:修改該wiki頁面,因爲它沒有任何意義;) – Juliet 2009-12-17 03:53:02