Семейные приложения типа Haskell не оцениваются

Я обнаружил интересную ситуацию при использовании типов данных с семействами типов.

Сообщение об ошибке компилятора No instance for (C (ID ())) arising from a use of W, Это предполагает, что приложение семейства типов не полностью оценено, даже когда оно насыщено. :kind! ID () оценивает ()в соответствии с C () Экземпляр должен быть использован.

{-# LANGUAGE GADTs, TypeFamilies, UndecidableInstances, FlexibleContexts #-}

type family ID t where
  ID t = t

class C t where
instance C () where

data W where
  W :: C (AppID t) => P t -> W

type family AppID t where
  AppID t = (ConstID t) ()

type family ConstID t where
  ConstID t = ID

data P t where
  P :: P t

data A

w :: W
w = W (P :: P A)

Могу ли я как-то форсировать оценку ID ()? Это ошибка компилятора?

Я использую GHC 7.8.3

1 ответ

Решение

Проблема в том, ConstID,

type family ConstID t a where
  ConstID t a = ID a
Другие вопросы по тегам