Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.86 KB | None | 0 0
  1.  
  2.  
  3. let a = Some (Some (Some (Some 1)))) // a är av typ int option option option option
  4.  
  5. // Plocka ut int'en i objektorienterat språk:
  6. // Enkelt, men enkelt att göra fel
  7. if (a.isSome && a.value.IsSome && a.value.value.isSome && a.value.value.value.isSome)
  8.   return 25 * a.value.value.value.value;
  9. else
  10.   return 0;
  11.  
  12. // Plocka ut i F# med pattern matching
  13. // Säkert, alla states tas om hand om uttryckligen men dålig dry och trist att skriva / underhålla
  14. match a with
  15. | Some a ->
  16.   match a with
  17.   | Some a ->
  18.     match a with
  19.     | Some a ->
  20.       match a ->
  21.       | Some -> printfn %d" a
  22.      | None -> 0
  23.    | None -> 0
  24.  | None -> 0
  25. | None -> 0
  26.  
  27. // Med option-monaded i F#:
  28. // Lika säkert som förra lösningen, men mycket mindre kod!
  29. match a |> Option.map >> Option.map >> Option.map >> Option.map (fun a -> a) with
  30. | Some a -> a * 25
  31. | None -> 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement