我想创建一个函数,它将允许我从一本书中取出数据Title,下面是数据类型创建
data Novel =
title String
year Int
bought Bool
deriving show
data Novel
title String
year Int
bought Bool
deriving show
我想创建一个函数getTitle它将获取标题
getTitle :: Novel -> String
getTitle = undefined
以及能够使用setBought
函数更改bought变量setBought:: Person -> String -> Person
setBought = undefined
首先,确保语法正确:
data Novel = Novel
{ title :: String
, year :: Int
, bought :: Bool }
deriving (Show)
现在,不管签名是怎么说的,title
是不是String
类型的变量,但它实际上是一个访问函数:
Prelude> :t title
title :: Novel -> String
这里就是你的getTitle
,不需要定义任何东西
对于setBought
,…嗯,Person
是什么?无论如何,对于"changes"的数据类型,您可以做两件事:
在构造函数上完全匹配并重新放回去。像
f :: Novel -> ... f (Novel t y b) = ... (Novel _ _ _) ...
使用记录更新语法
f :: Novel -> ... f book = ... book{ year=_ } ...
处理记录的一种完全不同的方式是透镜库。