Могу ли я иметь значение типа по умолчанию для связанного семейства типов? - PullRequest
0 голосов
/ 04 мая 2018

Рассмотрим этот код:

{-# 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 голосов
/ 04 мая 2018

Вам нужна подпись по умолчанию .

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| :}
...