类型文字用法



我试图理解haskell类型文字的用法。特别是,我认为我应该编写一个函数来显示自定义类型

的类型文字。
newtype Fixed (p :: Nat) a = Fixed a
instance (KnownNat p) => Show (Fixed p a) where
    show _ = show $ natVal (Proxy::Proxy p)

然而,ghc(7.8)不能推断KnownNat n0,这意味着我没有像我认为的那样约束事情。谁能告诉我出了什么问题?

您需要-XScopedTypeVariables让GHC识别您的Proxy pp与您的类型签名的p相同。

{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
import Data.Proxy
import GHC.TypeLits
newtype Fixed (p :: Nat) a = Fixed a
instance (KnownNat p) => Show (Fixed p a) where
        show _ = show $ natVal (Proxy::Proxy p)

最新更新