基本Haskell:函数的问题

基本Haskell:函数的问题,haskell,Haskell,我又遇到了另一个基本问题。我用的是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 ->

我又遇到了另一个基本问题。我用的是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
然而,当我尝试创建一个更复杂的函数updatewight时,出现了一些问题。updatewight允许用户从以前的值更改一个人的体重。你能指出我哪里出错了吗

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

问题是不能在表达式的右侧使用
\uu
占位符。您必须传递未更改的值。此外,您必须再次使用
权重
包装
w+b
的结果。这应该起作用:

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

通过使用
Person
类型,您可以摆脱传递未更改值的样板文件。

问题是您不能使用表达式右侧的
\u
占位符。您必须传递未更改的值。此外,您必须再次使用
权重
包装
w+b
的结果。这应该起作用:

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

您可以通过使用
Person
类型摆脱传递未更改值的样板文件。

您能接受昨天的答案吗?:)你能接受昨天的答案吗?:)