File: Reader.lhs

package info (click to toggle)
frown 0.6.1-13
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 9,956 kB
  • sloc: haskell: 35,132; makefile: 228; csh: 35; yacc: 23
file content (14 lines) | stat: -rw-r--r-- 570 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> module Reader where
>
> newtype Reader env a          =   Reader { apply :: env -> a }
>
> instance Monad (Reader env) where
>     return a                  =   Reader (\ env -> a)
>     m >>= k                   =   Reader (\ env -> apply (k (apply m env)) env)
>     fail s                    =   Reader (error s)
>
> getenv                        ::  Reader env env
> getenv                        =   Reader (\ env -> env)
>
> withenv                       ::  env -> Reader env a -> Reader env' a
> withenv env m                 =   Reader (\ env' -> apply m env)