Ville Tirronen
27.10.2011
http://www.youtube.com/watch?v=MhcW6VYjP_4 Ryhmät ------
README
vastaamaan ryhmän aitoa kokoonpanoa.Functor
Applicative
Alternative
Monoid
Monad
→ Ei soveltuvia ongelmanratkaisustrategioita.
Yksinkertainen ei tarkoita helppoa
case
:llaFunctor
instanssi jäsentimelledata Jasennin a = J (String -> Maybe (a,String))
class Functor f where
fmap :: (a -> b) -> (f a -> f b)
J :: (String -> Maybe (a,String)) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
ajaJasennin (J a) = a
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = ?
? :: (Jasennin a -> Jasennin b)
f :: (a->b)
J :: (String -> Maybe (a,String)) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = \a -> ??
?? :: Jasennin b
f :: (a->b)
a :: Jasennin a
J :: (String -> Maybe (a,String)) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = \jasennin -> ??
?? :: Jasennin b
f :: (a->b)
jasennin :: Jasennin a
J :: (String -> Maybe (a,String)) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = \jasennin -> ??
?? :: Jasennin b
f :: (a->b)
jasennin :: Jasennin a
J :: (String -> Maybe (a,String) -> Jasennin
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
Ainoa mahdollisuus lienee funktio J
.
Functor
instanssi jäsentimelleJ
:tä?instance Functor Jasennin where
fmap f = \jasennin -> J (???)
??? :: (String -> (Maybe b,String)
f :: (a->b)
jasennin :: Jasennin a
J :: (String -> Maybe (a,String) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = \jasennin -> J (\string -> ????)
???? :: Maybe (b,String)
string :: String
f :: (a->b)
J :: (String -> Maybe (a,String) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
jasennin :: Jasennin a
Functor
instanssi jäsentimelleAinoa tässä vaiheessa ainoa sovellettava funktio on ajaJasennin
. Lisätään se tiedettyjen asioiden joukkoon:
ajaJasennin jasennin string :: Maybe (a,String)
???? :: Maybe (b,String)
string :: String
f :: (a->b)
J :: (String -> Maybe (a,String) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
jasennin :: Jasennin a
Osaisimmeko kirjoittaa apufunktion, joka muuttaa Maybe (a,String)
:n Maybe (b,String)
ksi?
apufunktio
apufunktio :: Maybe (a,String) -> Maybe (b,String)
apufunktio Nothing = ??
apufunktio (Just (a,str)) = ???
str :: String
f :: (a->b)
a :: a
?? :: Maybe (b,String)
??? :: Maybe (b,String)
apufunktio
apufunktio :: Maybe (a,String) -> Maybe (b,String)
apufunktio Nothing = Nothing
apufunktio (Just (a,str)) = ???
Nothing :: Maybe (b,String)
str :: String
f :: (a->b)
a :: a
??? :: Maybe (b,String)
apufunktio
f a
on?Nothing :: Maybe (b,String)
str :: String
f :: (a->b)
a :: a
f a :: b
Just :: b -> Maybe b
??? :: Maybe (b,String)
apufunktio :: Maybe (a,String) -> Maybe (b,String)
apufunktio Nothing = Nothing
apufunktio (Just (a,str)) = Just (f a, str)
Functor
instanssi jäsentimelleKatsotaanpa mitä nyt olemme saaneet selville:
???? :: Maybe (b,String)
apufunktio :: Maybe (a,String) -> Maybe (b,String)
string :: String
f :: (a->b)
J :: (String -> Maybe (a,String) -> Jasennin a
ajaJasennin :: Jasennin a -> (String -> Maybe (a,String))
jasennin :: Jasennin a
ajaJasennin jasennin string :: Maybe (a,String)
Nyt meillä on funktio, josta tulee Maybe (b,String)
ja me osaamme kutsua sitä!
instance Functor Jasennin where
fmap f = \jasennin -> J (\string -> apufunktio (ajaJasennin jasennin string))
Functor
instanssi jäsentimelleinstance Functor Jasennin where
fmap f = \jasennin -> J (\string -> apufunktio (ajaJasennin jasennin string))
where
apufunktio Nothing = Nothing
apufunktio (Just (a,str)) = Just (f a, str)
Eli osasimme mitään tietämättä tehdä funktorin. Lisäksi, jos jatkamme, voimme siistiä koodin tosi nätiksi.
Jos niitä ei ole, niin sitten tehdään oma projekti.
Vakoilen teitä yousourcesta