输入文字用法

Oll*_*ieB 6 haskell types ghc

我试图理解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,这意味着我不会像我认为的那样限制事物.任何人都可以提出什么问题?

Mar*_*eld 7

你需要-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)