0

我又遇到了另一个基本问题。我正在使用 ghci。

我(在帮助下)创建了这个工作代码:

newtype Name = Name String deriving (Show)
newtype Age = Age Int deriving (Show)
newtype Weight = Weight Int deriving (Show)
newtype Person = Person (Name, Age, Weight) deriving (Show)   

isAdult :: Person -> Bool
isAdult (Person(_, Age a, _)) =  a > 18

但是,当我尝试制作一个更复杂的函数 updateWeight 时会出现问题,该函数允许用户从之前的值更改 Person 的权重。你能指出我哪里出错了吗?

updateWeight :: Person -> Int -> Person
updateWeight (Person(_,_,Weight w) b = (Person(_,_,w+b))
4

1 回答 1

3

问题是您不能使用_表达式右侧的占位符。您必须通过未更改的值。此外,您必须再次w + b用 a包装结果。Weight这应该有效:

updateWeight :: Person -> Int -> Person
updateWeight (Person(n, a, Weight w) b = (Person(n, a, Weight (w + b)))

您可以通过使用类型的记录语法来 摆脱传递未更改值的样板Person

于 2013-10-04T10:35:25.443 回答