我试图理解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 p
的p
与您的类型签名的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)