kme*_*ein 6 haskell types typeclass
阅读文章Scrap你的类型类后,我重新实现了一些显示的想法.虽然这样做我遇到了一些非常奇怪的东西:Type Class - Type可以用作类型约束!我的问题:为什么?
我的代码:
{-# 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
Run Code Online (Sandbox Code Playgroud)
在GHCi中,会发生以下情况:
>>> :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)
Run Code Online (Sandbox Code Playgroud)
这在 GHC 7.8.2 上不起作用。它给出了错误Expected a constraint, but \xe2\x80\x98IFunctor f\xe2\x80\x99 has kind \xe2\x80\x98*\xe2\x80\x99。
旧版本的 GHC 有一个错误,允许=>像这样使用->它们。这可能是因为内部类型类约束以方法字典的形式作为参数传递。
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |