使用推断类型时出现Haskell类型错误

使用推断类型时出现Haskell类型错误,haskell,types,Haskell,Types,我创建了一个数据类型来保存基本用户信息,并将其加载到ghci中。然后,我使用ghci查看新的数据类型签名。我将类型签名从ghci复制到源文件中,并尝试重新加载该文件。Ghci抛出了一个错误 下面是代码和错误 我的问题是,为什么这会抛出一个错误。我使用了ghci推断的类型 User :: Int -> String -> String -> String -> String -> User data User = User { userID :: Int,

我创建了一个数据类型来保存基本用户信息,并将其加载到ghci中。然后,我使用ghci查看新的数据类型签名。我将类型签名从ghci复制到源文件中,并尝试重新加载该文件。Ghci抛出了一个错误

下面是代码和错误

我的问题是,为什么这会抛出一个错误。我使用了ghci推断的类型

User :: Int -> String -> String -> String -> String -> User
data User = User { userID :: Int,
                   login :: String,
                   password :: String,
                   username :: String,
                   email :: String
                   } deriving (Show)
序曲>:r用户[1/1]编译 用户(User.hs, (解释)

User.hs:3:0:无效的类型签名 失败,已加载模块:无


可以声明值的类型(例如函数),但不能使用值的类型声明语法声明数据类型或数据构造函数的类型。事实上,在定义数据类型和数据构造函数时,您已经在声明它们的完整类型,因此不需要额外的类型声明。所以只需省去一行
用户::…
;该行是一个语法错误,因为它
User
带有大写U(构造函数),并且只有小写名称(值)可能具有指定的类型。

顺便说一句,如果您希望以“type annotationy”y样式编写用户,您可以使用以下语法:

{-# LANGUAGE GADTs #-}

data User where
     User :: Int -> String -> String -> String -> String -> User