我试图理解haskell类型文字的用法.特别是,我以为我会编写一个函数来显示自定义类型的类型文字
newtype Fixed (p :: Nat) a = Fixed a
instance (KnownNat p) => Show (Fixed p a) where
show _ = show $ natVal (Proxy::Proxy p)
Run Code Online (Sandbox Code Playgroud)
但是,ghc(7.8)不能推断出KnownNat n0,这意味着我不会像我认为的那样限制事物.任何人都可以提出什么问题?
你需要-XScopedTypeVariables
为GHC认识到p
你的Proxy 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)
Run Code Online (Sandbox Code Playgroud)