Po przeczytaniu artykułu Scrap your type classes ponownie zaimplementowałem niektóre z przedstawionych pomysłów. Robiąc to natknąłem się na coś naprawdę dziwnego: Klasa Typu - Typ może być używana jako ograniczenie typu! Moje pytanie: dlaczego tak jest?Typy danych klas typu
mój kod:
{-# LANGUAGE Rank2Types #-}
data IFunctor f = IFunctor {
_fmap :: forall a b. (a -> b) -> f a -> f b
}
-- this type checks...
_fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b)
_fmap2 = \inst -> _fmap inst . _fmap inst
W GHCi dodaje coś się dzieje:
>>> :t _fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b)
_fmap2 :: IFunctor f => (a -> b) -> f (f a) -> f (f b)
:: IFunctor f -> (a -> b) -> f (f a) -> f (f b)
To tylko błąd. – augustss
@augustss Czy zostało zgłoszone? Jeśli tak, to gdzie? – rightfold
Którą wersję GHC masz? – augustss