Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
Ostatnia wersja Both sides next revision
pl:dydaktyka:pp:haskell:lab-monads [2020/05/25 15:35]
msl [Zadania:]
pl:dydaktyka:pp:haskell:lab-monads [2020/05/25 16:07]
msl [Zadania:]
Linia 168: Linia 168:
  
 <code haskell> <code haskell>
-data Tree a = Empty | Node (Tree a) (Tree a)+data Tree a = Empty | Leaf a | Node (Tree a) (Tree a)
 </​code> ​ </​code> ​
  
Linia 184: Linia 184:
 Klasa ''​Applicative''​ umożliwa używanie funkcji opakowanych monadą. Klasa ''​Applicative''​ umożliwa używanie funkcji opakowanych monadą.
  
-Poniżej jest przykładowa implementacja ''​Applicative'',​ która jest poprawna, ale nie dba o porządek elementów ​drzewie (lepszej nam nie trzeba raczej ​na dzisiaj):+Poniżej jest przykładowa implementacja ''​Applicative'',​ która jest poprawna, ale akceptuje tylko pojedyncze funkcje opakowane ​liściach - na dzisiaj ​wystarczy:
   * ''​pure''​ to dokładnie to samo, co ''​return''​. Tak naprawdę w Monadzie zawsze można pisać: ''​return = pure'' ​   * ''​pure''​ to dokładnie to samo, co ''​return''​. Tak naprawdę w Monadzie zawsze można pisać: ''​return = pure'' ​
   * ''​%%<​*>​%%''​ aplikuje funkcję opakowaną monadą, taki ''​fmap'',​ który wyjmuje funkcję z pudełka, a nie ma go pod ręką   * ''​%%<​*>​%%''​ aplikuje funkcję opakowaną monadą, taki ''​fmap'',​ który wyjmuje funkcję z pudełka, a nie ma go pod ręką
Linia 192: Linia 192:
    pure x = Leaf x    pure x = Leaf x
    _ <*> Empty = Empty    _ <*> Empty = Empty
 +   (Leaf f) <*> (Leaf x) = Leaf (f x)
    (Leaf f) <*> (Node x y) = Node (fmap f x) (fmap f y)    (Leaf f) <*> (Node x y) = Node (fmap f x) (fmap f y)
 </​code>​ </​code>​
pl/dydaktyka/pp/haskell/lab-monads.txt · ostatnio zmienione: 2020/06/01 15:34 przez msl
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0