He estado jugando con las mónadas en Fa # (también conocido como expresiones de cálculo) y yo escribimos este simple mónada Identidad:expresiones de cálculo personalizada en 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 }
No entiendo el error que estoy recibiendo en el línea marcada:
se espera que esta expresión para tener identidad tipo < 'a> pero aquí tiene tipo' b * 'c
Creo que esto no tiene sentido como getInt() i s claramente un valor de tipo Identity<'a>
.
¿Alguien puede decirme qué estoy haciendo mal?
O ver la sección 6.4.10 de la especificación de idioma: http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html – Brian
Nota para mí: revisar esa wiki página porque no tiene sentido;) – Juliet