没有约束的GADT(或存在)是否可以编译为无类型的普通ADT?

时间:2014-04-15 09:10:08

标签: performance haskell gadt existential-type

假设我有一些ADT,比如

data Foo = Foo !Int
         | Bar (Int->Int) Foo

现在说我想强加一些额外的类型安全,摆脱"魔术数字类型":

{-# LANGUAGE GADTs #-}

newtype Intey a = Intey { getIntey :: Int }

data Foo' a where
   Foo :: !(Intey a) -> Foo' a
   Bar :: (Intey a -> Intey b) -> Foo' a -> Foo' b

由于b只是构造函数中的幻像参数,没有约束或其他任何东西,它基本上没有意义 - 除了类型检查器。因此它可以编译为与Foo相同,没有任何性能等成本吗?

0 个答案:

没有答案