val compose : f:('a -> 'b) -> g:('b -> 'c) -> x:'a -> 'c
Full name: index.compose
val f : ('a -> 'b)
val g : ('b -> 'c)
val x : 'a
val app : obj
Full name: index.app
Compose
1:
2:
3:
|
let compose f g x = g (f x)
let (>>) = compose
|
Elevated World

Functor
1:
|
fmap :: (a -> b) -> m a -> m b
|
Functor
List
1:
|
fmap :: (a -> b) -> [a] -> [b]
|
Functor
Option
1:
|
fmap :: (a -> b) -> Option a -> Option b
|
Functor
Task
1:
|
fmap :: (a -> b) -> Task a -> Task b
|
Podejście 1

Podejście 2

Prawo toższamości
Identity law
Zapewnia, że functor nie będzie robił, żadnych dodatkowych zmian i efektów ubocznych. Zmiany robi tylko aplikowana funkcja.
Prawo kompozycji
Composition law
Zapewnia, że implementacja functora nie będzie łamała kompozycji funkcji
1:
|
fmap (g . f) = fmap g . fmap f
|
Applicative
1:
2:
|
pure :: a -> m a
apply :: m (a -> b) -> m a -> m b
|
Monad
1:
|
bind :: (a -> m b) -> m a -> m b
|
Bonus : Kleisli
1:
|
arrow :: (a -> m b) -> (b -> m c) -> m a -> m c
|
Suave / Giraffe
1:
2:
3:
4:
5:
|
let app =
choose [
route "/ping" >=> text "pong"
route "/admin" >=> mustBeLoggedIn >=> text "You're an admin"
]
|
Podsumowanie
1:
2:
3:
|
fmap :: (a -> b) -> m a -> m b
apply :: m (a -> b) -> m a -> m b
bind :: (a -> m b) -> m a -> m b
|
Ale koduję w C#
Jak tu żyć?
Funkcyjny C#

Polecam F# ;)
