Ger*_*Nab -2 haskell functional-programming
我懂了:
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
Run Code Online (Sandbox Code Playgroud)
我的任务是,编写一个函数credit :: Int -> ID -> Bank -> Bank
,将指定金额的Money添加到指定金额的帐户.我不知道我怎么能这样做,因为这些是数据类型..
由于您Account使用记录语法定义,我们将再次使用记录语法对帐户进行更改.
如何修改Account以增加资金:
creditAccount :: Int -> Account -> Account
creditAccount amount acct = acct { balance = balance acct + amount }
Run Code Online (Sandbox Code Playgroud)
要修改a Bank,我们将使用模式匹配对其进行解构以获取基础列表accounts,然后使用Bank构造函数将结果列表提升回Bank类型.
如何通过修改Bank特定帐户来修改a :
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)
Run Code Online (Sandbox Code Playgroud)
将它们放在一起,如何Bank通过贷记特定帐户来修改a :
credit :: Int -> ID -> Bank -> Bank
credit amount i = modifyAccount i (creditAccount amount)
Run Code Online (Sandbox Code Playgroud)