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

0 haskell types

我是哈斯克尔的新人.我有新的类型:

type RealName = String
type UserName = String
type GroupName = String
type Message = String
Run Code Online (Sandbox Code Playgroud)

data User = User UserName RealName [UserName] [Post]
Run Code Online (Sandbox Code Playgroud)

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

accreal :: User -> RealName
accreal us = ??
Run Code Online (Sandbox Code Playgroud)

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

chi*_*chi 5

只需使用模式匹配:

accreal:: User -> RealName
accreal (User un rn uns ps) = rn
Run Code Online (Sandbox Code Playgroud)

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

accreal:: User -> RealName
accreal (User _un rn _uns _ps) = rn
Run Code Online (Sandbox Code Playgroud)

您也可以简单地使用_丢弃值,例如accreal (User _ rn _ _) = rn.

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

data User = User 
   { user :: UserName
   , real :: RealName
   , others :: [UserName]
   , posts :: [Post] }
Run Code Online (Sandbox Code Playgroud)

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