-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAttrReader.fsx
77 lines (30 loc) · 903 Bytes
/
AttrReader.fsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
module AttrReader =
/// retn : 'a -> Wrapper<'a>
let retn a =
AttrReader (fun _ -> a)
/// UNWRAPPER FUNCTION
let run (AttrReader f) m =
f m
/// map : ('a -> 'b) -> Wrapper<'a> -> Wrapper<'b>
let map f readerA =
let newReader m =
let unwrappedA = run readerA m
let b = f unwrappedA
b
AttrReader newReader
/// bind : ('a -> Wrapper<'b>) -> Wrapper<'a> -> Wrapper<'b>
let bind f readerA =
let newReader m =
let unwrappedA = run readerA m
let readerB = f unwrappedA
let unwrappedB = run readerB m
unwrappedB
AttrReader newReader
/// apply : Wrapper<('a -> 'b)> -> Wrapper<'a> -> Wrapper<'b>
let apply f readerA =
let newReader m =
let unwrappedF = run f m
let unwrappedA = run readerA m
let b = unwrappedF unwrappedA
b
AttrReader newReader