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

Funkcyjna kompozycja

Higher Order Functions

Compose

1: 
2: 
3: 
let compose f g x = g (f x)

let (>>) = compose

Elevated World

Elevated

Elevated2

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

Look1

Podejście 2

Look2

Przestrzeganie reguł

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.

1: 
fmap id a = id a

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ć?

LanguageExt

Funkcyjny C#

Fail

Polecam F# ;)

Logo

Linki

Nauka F#
http://fsharpforfunandprofit.com/

Teoria Kategorii dla Programistów https://github.com/hmemcpy/milewski-ctfp-pdf