„Haskell (programozási nyelv)” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
387. sor:
</source>
 
 
===== Maybe Monád =====
 
Maybe típus Preludben definiált
<source lang=haskell>
Maybe a
= Nothing
| Just a
</source>
Olyan esetekben alkalmayandó kényelmesen, ahol egy számításnak vagy létezik valamilyen eredménye, vagy nem.
pl: ''[a]'' listából keressük ki az első ''f :: a -> Bool'' tulajdonságú elemet.
<source lang=haskell>
elem :: [a] -> Maybe a
elem [] = Nothing
elem (x:xs) = if f x then Just x else elem xs
</source>
Ha szükség van több ''Maybe'' eredményt visszaadó függvény kompoziciójára, a használata kényelmetlen lehet, a folyamatos minta illesztések miatt.
<source lang=haskell>
foo :: Maybe a
foo = case getAList of
Nothing -> Nothing
Just l -> case elem l of
Nothing -> Nothing
Just x -> case if x > 10 && x < 20 then Just x else Nothing of
Nothing -> Nothing
Just x -> doSomething x
</source>
Ezért a Preludeben, a Maybe példányosítva van, a Monad osztályra.
Monádokkal a fenti függvény:
<source lang=haskell>
foo :: Maybe a
foo = do
l <- getAList
x <- elem l
y <- if x > 10 && x < 20 then Just x else Nothing
doSomething y
</source>
Ez a példányosítás pedig így néz ki
<source lang=haskell>
instance Monad Maybe where
(>>=) Nothing _ = Nothing
(>>=) (Just v) f = f v
return = Just
</source>
 
==== És ami mögötte van ====