Я играл с монад в F # (ака вычисления выражений), и я написал эту простую Удостоверение монады:Пользовательские вычисления выражения в 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 }
Я не понимаю, ошибки я получаю в заметная линия:
Это выражение, как ожидается, имеет тип идентичности < «а>, но здесь имеет тип» Ь * «с
Я думаю, что это не имеет смысла, как GetInt() Я очевидно, значение типа Identity<'a>
.
Может ли кто-нибудь сказать мне, что я делаю неправильно?
Или см. Раздел 6.4.10 спецификации языка: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html – Brian
Примечание для себя: пересмотреть эту вики потому что это не имеет смысла;) – Juliet