Sim, eles são equivalentes no sentido de que o Optiontipo Option.binde o construtor de tipos Someconstituem uma mônada.
Embora as mônadas (como na Monadclasse) sejam uma parte central da identidade de Haskells, do ponto de vista conceitual elas são uma construção independente da linguagem. Um padrão de design, se quiser. Se você possui um tipo e possui uma função de vinculação e retorno com assinaturas específicas que obedecem a um conjunto específico de leis - você tem uma mônada - independentemente do idioma usado.
As expressões de computação do F # fornecem apenas um açúcar de sintaxe programável para as mônadas, semelhante à notação do Haskell. Embora não exista Optionum construtor de expressões de computação pronto para uso, você pode facilmente definir um esqueleto como este:
type OptionBuilder () =
member this.Bind(m, f) = Option.bind f m
member this.Return(a) = Some a
let option = OptionBuilder ()
E use-o assim:
let c =
option {
let! a = Some 4
let! b = None
return a + b
}
que é um equivalente açucarado de algo como isto:
let c =
(Some 4)
|> Option.bind (fun a ->
None
|> Option.bind (fun b ->
Some (a + b)))
Observe como os membros do construtor espelham a Monadclasse e como você pode escrever código monádico - mesmo que complicado - sem um construtor.
that's not the case? Eles se parecem muito comigo.