我可以为关联的类型系列设置默认类型值吗?

时间:2018-05-04 05:33:37

标签: haskell types type-families

考虑以下代码:

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeFamilyDependencies #-}

module Study where

class C a where
    type T a = r | r -> a
    pred :: T a -> Bool
    pred _ = True

我希望有一个更有意义的默认定义pred,如下所示:

class C' a where
    ...
    pred' = not . null

(我想默认 T' a = [a] 。)

有办法吗?

1 个答案:

答案 0 :(得分:2)

您需要default signature

Prelude> :{
Prelude| class C a where
Prelude|   type T a = r | r -> a
Prelude|   pred :: T a -> Bool
Prelude|   default pred :: (T a ~ [a]) => T a -> Bool
Prelude|   pred = not . null
Prelude| :}