F# Code: Generic Monadic Map and Join using statically resolved type variables

F# Code: Generic Monadic Map and Join using statically resolved type variables.

Det här borde verkligen gå att komma längre med.

Mina försök har inte kommit längre än:

let inline map m f = (^x : (member Map: (^a -> ^b) -> ^n) m, f)

let inline bind m f = (^x : (static member Bind: ^x -> (^a -> ^b) -> ^n) m, f)

let inline (>>=) m f = (^x : (static member Bind: ^x -> (^a -> ^b) -> ^n) m, f)

Det verkar i sig fungera men inte tillsammans med extension-metoder:

type 'a Option with
     member Bind (x, fn) = match x with | None -> None | Some x -> fn x
     member x.Map (fn) = match x with | None -> None | Some x -> Some (fn x)

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s

%d bloggare gillar detta: