кроме того для ньютайпов есть один важный инструмент: coerce
если два типа X и Y это просто номинально разные версии одного и того же типа (например X - ньютайп над Y, или они оба ньютайпы от другого типа Z, который тоже может быть ньютайпом), то можно, и конструкторы X и Y есть в контексте, то существует функция coercе, которая сменит номинальный тип
newtype X = X Int
a :: Int a = 1
b :: X b = coece a
c :: [Int] c = [1, 2, 3]
d :: [X] d = coerce x
plus :: Int -> Int -> Int plus a b = a + b
plus_xxx :: X -> X -> X plus_xxx = coerce plus
plus_xix :: X -> Int -> X plus_xix = coerce plus_xxx -- = coerce plus
писать d = map coerce x нет смысла, так как это по сути будет map id
Автор_ка оставила тут объявление класса Аппликатива, чтоб читателю было яснее ,что это такое. Ну я и скопировал, как дурак. В итоге сидел, думал, почему появилось 100500 ошибок и хлс просит уточнить, что мне нужен прелюдный аппликатив
ага, ещё целых 4 часа поспать будет... Проблема в том, что я уже сильно туплю из-за желания спать, я даже статью через силу читаю и завтра скорее всего мне её придётся перечитывать
К тому же иногда нужно просто работать с URI, не описывая сервер в принципе. Тут может пригодиться аппликативный решатель, работающий с уже разобранными сегментами пути
Потому что мне интересна тема коданализа и построения синтаксических деревьев для возможной оптимизации(ну или той же трансляции), а хаскель даёт для этого мощнейшую семантику?