0 people like it.

Monad Bind 4 of 3

Functions (first example repeated)

1: 
2: 
3: 
let f (noWeeks: A): B = float (7 * noWeeks)
let g (noDays: B): C = today.AddDays noDays
let h (date: C): D = date.ToShortDateString ()

The pipe operator(s)

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
/// Plain old pipe operator
let pipe1 x f = f x

/// Special purpose pipe operator
let pipe2 (x, s) f =
    let fx= f x
    let msg = sprintf "fun(%s)=%A" s fx
    fx, msg

The results

 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
// My input parameters
let x0 = myInputParam
let msg0 = sprintf "%A" x0

/// Example result (plain)
let result1 =
    pipe1 (pipe1 (pipe1 x0 f) g) h

/// Example result (as tuple)
let result2, msg2 =
    pipe2 (pipe2 (pipe2 (x0, msg0) f) g) h
val f : noWeeks:A -> B

Full name: Script.f
val noWeeks : A
type A = int

Full name: Script.A
type B = float

Full name: Script.B
Multiple items
val float : value:'T -> float (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float

--------------------
type float = Double

Full name: Microsoft.FSharp.Core.float

--------------------
type float<'Measure> = float

Full name: Microsoft.FSharp.Core.float<_>
val g : noDays:B -> C

Full name: Script.g
val noDays : B
type C = DateTime

Full name: Script.C
val today : DateTime

Full name: Script.today


 Today's date and time for use in examples below.
DateTime.AddDays(value: float) : DateTime
val h : date:C -> D

Full name: Script.h
val date : C
type D = string

Full name: Script.D
DateTime.ToShortDateString() : string
val pipe1 : x:'a -> f:('a -> 'b) -> 'b

Full name: Script.pipe1


 Plain old pipe operator
val x : 'a
val f : ('a -> 'b)
val pipe2 : x:'a * s:string -> f:('a -> 'b) -> 'b * string

Full name: Script.pipe2


 Special purpose pipe operator
val s : string
val fx : 'b
val msg : string
val sprintf : format:Printf.StringFormat<'T> -> 'T

Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.sprintf
val x0 : int

Full name: Script.x0
val myInputParam : int

Full name: Script.myInputParam


 The test parameter I will use is "2" as in "two weeks from now".
val msg0 : string

Full name: Script.msg0
val result1 : D

Full name: Script.result1


 Example result (plain)
val result2 : D

Full name: Script.result2


 Example result (as tuple)
val msg2 : string

Full name: Script.msg2


 Example result (as tuple)
Raw view Test code New version

More information

Link:http://fssnip.net/lH
Posted:10 years ago
Author:
Tags: