这个GHC.Generic函数签名错误消息是什么意思?

时间:2015-08-26 12:04:27

标签: haskell generics

我正在学习Haskell。为什么我无法将Person更改为a

的方法签名中的变量getName
{-# LANGUAGE DeriveGeneric #-}
module Main where

import GHC.Generics


data Person = Person { id   :: Int
                     , name :: String
                     , age  :: Int }
            deriving (Generic, Show)

p = from $ Person 12 "J" 12

getName :: (Rep Person) x -> String
-- getName :: Generic a => (Rep a) x -> String
----^ Err: Couldn't match type ‘Rep a0’ with ‘Rep a
getName f = concat [ moduleName f
                   , "_"
                   , datatypeName f
                   ]

n = getName p

1 个答案:

答案 0 :(得分:1)

只需省略$digest的类型签名。

在ghci会话中运行代码会产生以下结果:

getName

注意:我的代码位于模块ghci> :t getName getName :: Datatype d => t d f a -> [Char] ghci> getName p "Lib9_Person" ghci> :t getName p getName p :: [Char] 中,该模块解释了Lib9的输出。

如果要为其指定类型签名,请启用getName p并使用:

KindSignatures