我明白了:
type ID = Int
data Bank = Bank [(ID, Account)] deriving Show
data Account = Account
{ balance :: Int
, owner :: Client
} deriving Show
data Client = Client
{ name :: String
, surname :: String
, address :: String
} deriving Show
我的任务是,写一个函数credit :: Int -> ID -> Bank -> Bank
将指定金额添加到指定金额
帐户。
我不知道我怎么能这样做,因为这些是数据类型..
答案 0 :(得分:5)
由于您使用记录语法定义了Account
,我们将再次使用记录语法对帐户进行更改。
如何修改Account
以向其添加资金:
creditAccount :: Int -> Account -> Account
creditAccount amount acct = acct { balance = balance acct + amount }
要修改Bank
,我们将使用模式匹配对其进行解构,以获取accounts
的基础列表,然后使用Bank
构造函数来解除结果列表返回Bank
类型。
如何通过修改特定帐户来修改Bank
:
modifyAccount :: ID -> (Account -> Account) -> Bank -> Bank
modifyAccount i f (Bank accounts) = Bank (map g accounts)
where
g (i', acct) = (i', if i == i' then f acct else acct)
汇总,如何通过贷记特定帐户来修改Bank
:
credit :: Int -> ID -> Bank -> Bank
credit amount i = modifyAccount i (creditAccount amount)