В следующем коде, T1
и T2
компилироваться, но T3
не удается:Ошибки компиляции с семьями типа, GADTs и именованными записями
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
type family F a
data T1 b where
T1 :: a -> T1 (F a)
data T2 b where
T2 :: { x2 :: a } -> T2 a
data T3 b where
T3 :: { x3 :: a } -> T3 (F a)
Я пытаюсь понять, почему. T3
всего лишь T1
, но с названной записью. Это не похоже на все, что особенно важно, поскольку в любом случае можно использовать синтаксис конструктора.
Эти примеры, вероятно, выглядят глупо, но в моем коде есть ограничение на a
, например. (Show a)
, поэтому эти значения могут использоваться, когда они извлекаются.