Skip to content

Latest commit

 

History

History
73 lines (51 loc) · 1.17 KB

Lecture07.md

File metadata and controls

73 lines (51 loc) · 1.17 KB

Programowanie funkcyjne

Tomasz Brengos

Wykład 7

Kod wykładu

Basics/Lecture07.hs


Własności (niektórych) monad

Twierdzenie z TK

Niech (m, join, return) będzie monadą. Wtedy istnieje naturalna struktura monad na następujących funktorach:

  1. m . Maybe
  2. m . (Either a)
  3. s -> m ( , s)
  4. Monoid w => m ( , w)
  5. ...

Uwaga:

Nie jest zawsze prawdą to, że złożenie dowolnych dwóch monad na danej kategorii jest monadą!


Monad Transformers

m   ~>  t m -- nowa monada.

Formalnie, w Haskellu transfomery monad zdefiniowane są przez zdefiniowanie:

  1. Parametrycznego typu danych
t :: ( * -> * ) -> * -> *
  1. Instancji klasy:
class MonadTrans t where
  lift :: Monad m => m a -> t m a
  1. Dla każdej monady m zdefiniowanie instancji klasy Monad dla t m.

Rozważmy przykład transformaty MaybeT

newtype MaybeT m a = MaybeT { runMaybeT :: m (Maybe a) }

Praca domowa

Napisać definicję instancji transformaty StateT.


Praca z przykładami

Przykład 1.

type Cost = State Int

type ExtraCost = StateT Double Cost

Przykład 2.

type MaybeIO = MaybeT IO