действительно. почему не type S a = [a] или даже data S a = S [a], тогда функции проще вроде получаются (по крайней мере код короче из-за использования стандартных), а при втором варианте можно закрыть в модуле возможность делать S [], чтобы абстракция всегда была бесконечной.
Во-первых, из-за необходимости перекрывать определения классов. Я планировал, помимо Show, перекрыть ещё Num и многое другое. Не понадобилось.
Первый вариант плох ещё и тем, что синоним типа может быть раскрыт и получится что-то типа [([a],[[a]])] -> [(b,[c])] -> ... -> [[a]]. В общем, сплошная путаница. ;)
Второй вариант используется Hawk. Он лишён вышеуказанных недостатков, но другой пользы от него я никакой не вижу. Всё равно примитивов, работающих с внутренней структурой сигнала раз-два и обчёлся.
Как выяснилось в процессе работы, мой вариант ещё и быстрей работает. ;)
Хорошо! Третий вариант :) newtype S a = S [a] ;-) Хочешь перекрываешь инстансы, хочешь derive-ишь.
Помнишь, я говорил, что мне кажется, что подобные вещи лучше делать на комонадах? Так вот я тут хочу сделать то же самое таким образом, если будет время да ещё и получится - обязательно выложу.
Comments 45
нужно < подставить
Reply
Reply
Reply
(The comment has been removed)
Reply
Reply
Reply
Первый вариант плох ещё и тем, что синоним типа может быть раскрыт и получится что-то типа [([a],[[a]])] -> [(b,[c])] -> ... -> [[a]]. В общем, сплошная путаница. ;)
Второй вариант используется Hawk. Он лишён вышеуказанных недостатков, но другой пользы от него я никакой не вижу. Всё равно примитивов, работающих с внутренней структурой сигнала раз-два и обчёлся.
Как выяснилось в процессе работы, мой вариант ещё и быстрей работает. ;)
Reply
Хочешь перекрываешь инстансы, хочешь derive-ишь.
Помнишь, я говорил, что мне кажется, что подобные вещи лучше делать на комонадах? Так вот я тут хочу сделать то же самое таким образом, если будет время да ещё и получится - обязательно выложу.
Reply
А то ни один из этих модулей не компилируется (ни S, ни SVB)... :о(
Reply
Reply
Reply
Reply
Reply
Reply
Leave a comment