айс, потому что где потом эта ошибка стрельнет? Не тотальные функции -- вот эта вся тема. Надо заворачивать в MonadFail или MonadThrow.
                  
                  
                  
                  
                  
                  Я могу представить себе преимущество от наворачивания Template Haskell поверх смарт-конструкторов только для тестов. Там полно мест где значения будут конструироваться из литералов и хочется избежать бесконечных fromJust:
                  
                  
                  
                  
                  
                  $$(positiveTH 1) vs fromJust . positive $ 1
                  
                  
                  
                  
                  
                  В боевом коде особых преимуществ TH поверх конструктора наверное нет -- там значения приходят снаружи и рантайм проверки не избежать.
                  
                  
                  
                  
                  
                  Волковская библиотека позволяет делать рантайм проверки. В случае рантайм проверок вопрос остаётся: 1. Refined Positive Int vs 2. Смарт конструктор Positive vs 3. Int.
                  
                  
                  
                  
                  
                  Я склоняюсь к 1, потому что предикаты можно композить:
                  
                  
                  
                  
                  
                  Refined (And Positive Even) Int
                  
                  
                  
                  
                  
                  А как композить типы с смарт-конструкторами не очень понятно.
                  
                  
                
Я бы тоже склонялся к 1, но я его библиотеку подробно не изучал Я бы на самом деле даже без TH это использовал Я профит от этого вижу в том что вся механика проверки предикатов становится автоматической (не надо руками Смарт конструкторы писать), программисту гарантируется что все значения хорошие, и появляется возможность делать всякие интересности с предикатами типо автоматически вставлять их описание в документацию или автоматически проверять предикаты когда например refined типы как поле джейсона декодишь
Обсуждают сегодня