Почему я не могу использовать вид Constraint в объявлениях семейства типов? - PullRequest
0 голосов
/ 27 октября 2018

Я использую

{-# LANGUAGE TypeFamilies, DataKinds, ConstraintKinds, ExistentialQuantification #-}

и набрал следующий код:

class NoConstraint x where {}
instance forall x. NoConstraint x where {}

type family Classes (c :: [* -> Constraint]) (x :: *) :: Constraint
type instance Classes [] x = NoConstraint x
type instance Classes (h : t) x = (h x, Classes t x)

Однако GHC (i) отклоняет это с помощью:

Not in scope: type constructor or class `Constraint'

Похоже, однако, что это должно быть полностью возможно.


Редактировать: Теперь я обнаружил, что есть и другие проблемы с вышеуказанным кодом.
Однако, это остаетсяправильный вопрос.

1 Ответ

0 голосов
/ 27 октября 2018

Проблема в том, что Constraint не экспортируется по умолчанию из Prelude.Вы можете hoogle Constraint, чтобы найти его:

Попробуйте добавить в свой модуль следующее:

import Data.Kind (Constraint)

Это решает проблему для меня.

...