Biraz "Macar notasyonu" var, ama oldukça farklı. Kısacası, Haskell'in tip sistemi, çoğu için ihtiyacı ortadan kaldırır.
map
/mapM
bir şey düzgün bir örnektir. Bu iki işlev tam olarak aynı kavramı verir, ancak polimorfik olarak temsil edilemez çünkü farkın soyutlanması gerçekten gürültülü olur. Yani bunun yerine bir Macar notası seçiyoruz.
mapM
yaptığı tüm monad eklemek, ancak aynı değildir, iki tür
map :: (a -> b) -> ([a] -> [b])
mapM :: Monad m => (a -> m b) -> ([a] -> m [b])
Bunlar benzer olan, berrak olmak. yapı aşağıdaki eş anlamlılarını
type Arr a b = a -> b
type Klei m a b = a -> m b
yaparken ortaya ve
map :: Arr a b -> Arr [a] [b]
mapM :: Monad m => Klei m a b -> Klei m [a] [b]
olarak not etmek şeyi türlerini yeniden yazmak olduğunu Arr
ve Monad m => Klei m
son derece benzer şeyler genellikle olmasıdır. Her ikisi de içinde her türlü hesaplama yapabilmemizi sağlayan "kategori" olarak bilinen belirli bir yapı oluştururlar.[0] istediğimiz ne
class Mapping cat where
map :: cat a b -> cat [a] [b]
instance Mapping (->) where map = Prelude.map
instance Monad m => Mapping (Klei m) where map = mapM -- in spirit anyway
gibi bir şeyle kategorisinde seçme konusunda soyut etmektir ama yol daha Functor
ile liste kısmı üzerinde soyutlayarak elde edilecek orada olduğu ortaya çıktı [1]
class Functor f where
map :: (a -> b) -> (f a -> f b)
instance Functor [] where
map = Prelude.map
instance Functor Maybe where
map Nothing = Nothing
map (Just a) = Just (f a)
ve bu yalınlık sağlamak için biz Haskell'ın polimorfizm işlevselliği içine yuvarlayarak yerine kategorisinin fark yaratmak için Macar simgelem.
[0] Klei m
'un bir kategori olduğu gerçeği, m
'un bir monad olduğunu ve kategori yasalarının tam olarak monad yasaları olmasını sağlar. Özellikle, bu monad yasalarının ne olduğunu hatırlamak için en sevdiğim yol.
[1] Teknik olarak Functor
tek yöntemi denir değil map
fmap
ama ve belki de sadece map
adlandırılabilir başladı. f
eklenmiştir, böylece map
için tip imzası basit kalır (listelerde uzmanlaşır) ve böylece yeni başlayanlar için biraz daha az korkutucudur. Bu doğru karar olup olmadığı bugün devam eden bir tartışmadır.
Macarca notasyon, değişken adlarına tür bilgisi ekleme genel fikri değildir; Bu, özellikle, değişken adına * önekleme * tipi bilgileri ile ilgilidir. – jamesdlin