Эй, поэтому я читал этот пост о разработке с использованием типов в Java. Мне не удалось разобраться с типами Java, поэтому я попытался написать его в Haskell. Однако у меня есть две проблемы:
- Я не знаю, как реализовать разницу между валютой и фактическим кусочком денег. Сначала я думал, что валюта - это всего лишь тип денег (и я думаю, что это имеет смысл), как это
data Dollar = Dollar Double
, где значение, подобноеDollar 4.0
, - это деньги, аDollar
тип - валюта. И я думаю, чтоDollar :: Double -> Dollar
будет чем-то не экспортированным. - Это приводит к тому, что я не могу моделировать банк, который обменивает деньги. Я думал что-то вроде
exchange :: (Money a, Money b) =>[ExchangeRate] -> a -> b
. Тогда банк - это просто объект, который содержит коллекцию ExchangeRates, но я не знаю, какой тип ExchangeRate существует.
Код, который у меня есть до сих пор:
class Money m where
money :: (Money m) => Double -> m
amount :: (Money m) => m -> Double
add :: (Money m) => m -> m -> m
add a b = money $ amount a + amount b
class (Money a, Money b) => ExchangeablePair a b where
newtype Dollar = Dollar Double
deriving (Show, Eq)
instance Money Dollar where
money = Dollar
amount (Dollar a) = a
newtype Franc = Franc Double
deriving (Show, Eq)
instance Money Franc where
money = Franc
amount (Franc a) = a
instance ExchangeablePair Dollar Franc where
РЕДАКТИРОВАТЬ: Я все еще хочу сохранить что-то вроде этого: buyAmericanBigMac :: Dollar -> (BigMac, Dollar)
.