Alexander Temerev (sorhed) wrote,
Alexander Temerev
sorhed

More magic.

Решительно непонятно, как можно программировать на языке без dependent types. Такие костыли, знаете ли, получаются.

Я работаю со всякими финансовыми штуками. Есть такое понятие «инструмент», т.е. то, чем мы в данный момент торгуем. Выкинем пока из головы всякие фьючерсы и опционы, и сосредоточимся на обычном спотовом рынке. Допустим, мы можем торговать только валютами и металлами.

Соответственно, есть тип Instrument(primary: Asset, secondary: Asset), где Asset — названный так за неимением лучшего слова тип ценности. Инструмент выражает одну ценность в другой, например, мы торгуем нефтью за доллары. Или долларами за франки. Или меняем золото на нефть. Таким образом, Asset может быть Currency или Commodity (Metal, в нашем случае). Всё бы хорошо.

Но если оба Asset в Instrument являются Currency, этот инструмент автоматически должен становиться типа CurrencyPair, с разными дополнительными доступными штуками (типа подсчёта количества пипсов etc). Увы, так просто это в скале, например, не выразить, поэтому приходится использовать pattern matching и прочие костыли.

Или вот например денежный тип. Казалось бы, всё просто: это Money(amount: Decimal, asset: Asset) (тех, кто использует там Double, в 99% случаев нужно кастрировать). Но в контексте работы с портфелем позиций гораздо удобнее рассматривать скалярную сумму денег тоже как некоторую позицию, т.е. Position(primary: Money, secondary: Money), где primary всегда равен нулю. При этом с точки зрения финансовой математики, если количество денег равно нулю, не имеет значения, в какой валюте они выражены (и действительно, совершенно без разницы, ноль евро у вас или ноль франков), и ноль всегда можно сложить с любым количеством денег в любой другой валюте, в то время как ненулевые суммы денег в разных валютах складывать нельзя. В этом случае можно, наверное, вывернуться с Either, но это неудобно — в идеале нужны именно зависимые типы.

Если вы ничего не поняли, то это потому, что я ненастоящий сварщик и плохо объясняю. И ещё потому, что без бутылки тут в принципе не разберёшься. А под алкоголем нельзя программировать. В общем, бида, бида.
Tags: fp
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 22 comments