Haskell中的新数据类型元素访问

时间:2016-03-24 13:02:48

标签: haskell types

我是haskell的新手。 我有新的类型:

type RealName = String
type UserName = String
type GroupName = String
type Message = String

data User = User UserName RealName [UserName] [Post]

在新功能中我想访问用户的真实姓名;

accreal :: User -> RealName
accreal us = ??

我怎么能这样做,我尝试了很多方法,但没有工作。

1 个答案:

答案 0 :(得分:5)

只需使用模式匹配:

accreal:: User -> RealName
accreal (User un rn uns ps) = rn

您可能还希望使用_为未使用的变量添加前缀以禁止显示警告。

accreal:: User -> RealName
accreal (User _un rn _uns _ps) = rn

您也可以使用_来放弃某个值,例如accreal (User _ rn _ _) = rn

或者,将您的data类型更改为记录:

data User = User 
   { user :: UserName
   , real :: RealName
   , others :: [UserName]
   , posts :: [Post] }

这会自动为您定义投影real :: User -> RealName