考虑以下代码:

{-# 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]。)

有办法吗?

最佳答案

您需要一个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| :}

(感谢@luqui。)请注意,如果您希望能够编写一个空的instance C Integer,则还应通过添加T行来提供type T a = [a]的默认值。

关于haskell - 我可以为关联的类型族使用默认类型值吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50167812/

10-13 03:09