Ich habe mit Monaden in F # liebäugelt (aka Berechnung Ausdrücke) und ich schrieb diese einfache Identität Monade:Individuelle Berechnung Ausdrücke in 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 }
Ich verstehe nicht den Fehler, den ich in der immer bin markierte Zeile:
Dieser Ausdruck wurde erwartet Typ Identität < haben 'a> aber hier hat Typ' b * ‚c
ich denke, das keinen Sinn, da getInt macht() i s eindeutig ein Wert vom Typ Identity<'a>
.
Kann mir jemand sagen, was mache ich falsch?
Oder siehe Abschnitt 6.4.10 der Sprachspezifikation: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html – Brian
Hinweis zu sich selbst: revidiere das Wiki Seite, weil es keinen Sinn macht;) – Juliet