Advertisement
Guest User

Untitled

a guest
May 31st, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 0.90 KB | None | 0 0
  1. open System
  2.  
  3. type Maybe<'T> = Just of 'T | Nothing
  4.  
  5. let bind ma f =
  6.     match ma with
  7.     | Just x -> f x
  8.     | Nothing -> Nothing
  9.  
  10. type MaybeBuilder() =
  11.     member x.Bind(v,f) = bind v f
  12.     member x.Return v = Just v
  13.     member x.ReturnFrom o = o
  14.     member x.Zero() = Nothing
  15.  
  16. let maybe = MaybeBuilder()
  17.  
  18. let targetFunc (str:string) (date:DateTime) (amount: decimal) (ok:bool) : Maybe<decimal> =
  19.     Console.WriteLine("{0} {1} {2} {3}", str, date, amount, ok)
  20.     if ok
  21.         then Just(amount + 50m)
  22.         else Nothing
  23.        
  24. let testFunc (mAmount:Maybe<decimal>) : Maybe<decimal> =
  25.     let mStr = Just("hi")
  26.     let mDate = Just(DateTime.Now)    
  27.     let mOk = Just(true)
  28.  
  29.     maybe {
  30.         let! str = mStr
  31.         let! date = mDate
  32.         let! amount = mAmount
  33.         let! ok = mOk
  34.  
  35.         return! targetFunc str date amount ok
  36.     }
  37.  
  38. let result = testFunc (Just 10m)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement