考虑以下代码:
{-# 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/