Links und Funktionen
Sprachumschaltung

Navigationspfad


Inhaltsbereich

iffy versus miffy

Motivation für Monade; Code-Vorlage stammt aus "Applicative Programming with Effects" von Conor McBride und Ross Paterson.

Haskell source code icon iffy.hs — Haskell source code, 1 KB (1231 bytes)

Dateiinhalt

-----------------------------------------------
-- Fortgeschrittene Funktionale Programmierung
-- Wintersemester 2015/16
-- LMU München
-- Steffen Jost
--
-- Code Beispiel aus 
--   "Applicative Programming with Effects"
--    von Conor McBride und Ross Paterson, 2008
-- 


import Data.Maybe
import Data.Functor
import Control.Applicative
import Control.Monad

iffy :: Applicative f => f Bool -> f a -> f a -> f a
iffy fb ft ff = cond <$> fb <*> ft <*> ff
  where
    cond b t f = if b then t else f
    
miffy :: Monad m => m Bool -> m a -> m a -> m a    
miffy mb mt mf = mb >>= condm
  where condm b = if b then mt else mf
        
test11 =  iffy (Just True) (Just 1) (Just 2)
test12 =  iffy (Just True) (Just 1) Nothing        
test21 = miffy (Just True) (Just 1) (Just 2)        
test22 = miffy (Just True) (Just 1) Nothing        

-- Beobachte: test12 /= test22


        
myap :: Monad m => m (a -> b) -> m a -> m b 
myap mf mx = mf >>= (\f -> 
             mx >>= (\x -> return (f x)))
             
             
foo2  f  x = f <*> x 

foo1 mf mx = do
      f <- mf
      x <- mx
      return (f x)
      
foo3 f mx my = do      
      x <- mx
      y <- my 
      return $ f x y
      
foo4 f x y = f <$> x <*> y      

Artikelaktionen


Funktionsleiste