- 1
- 2
- 3
- 4
data Fuuu = Fuuu
instance Eq Fuuu
main = print $ if Fuuu == Fuuu then "I dosen't seen this" else "and this"
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+119
data Fuuu = Fuuu
instance Eq Fuuu
main = print $ if Fuuu == Fuuu then "I dosen't seen this" else "and this"
Вот за что мне нравится сверх надежный высокоуровневый хаскель, так за то, что если забыл переопределить какой-то метод или оператор из класа типов (в нормальных языках это интерфейс или один из базовых класов) стандартной библиотеки языка или неподходящим образом от него отнаследовался, то мы получаем надежное поведение:
http://ideone.com/6faPct
результат: Ошибка выполнения время: 0.01s память: 3580 kB сигнал: -1
ввод: нет
вывод: нет
stderr:
prog: <<loop>>
Можете поподробнее рассказать, а то гуглится обычный хардкодный в компиляторе дерайвинг.
Data.Derive is a library and a tool for deriving instances for Haskell programs.
P.S. Только загуглил. Не читал. Никаких гарантий, что это то.
Заходишь на говнокод - и видишь на главной одно непонятное УГ.
Лол.
А сравнение не пашет, потому что ты его не определил. Надо было либо
, либо
Если в классе типов есть полиморфные функции без реализации по-умолчанию, компилятор не даст тебе объявить экземпляр, не предоставив реализаций.
FAIL
Только С++ его и терпит.
Цитирую себя:
> если забыл переопределить какой-то метод, то получаешь следующее поведение
> забыл
В случае с Eq это обычно не проблема, тк операторов мало, ты их знаешь и надо быть идиотом, чтобы забыть какой-то, а вот если что-то посложнее - надежный Хаскель покажет дулю во время выполнения перед заказчиком. Могли бы уж запилить контракты на обязательное переопределение хотябы одного метода или не устраивать такую вахканалию.
Тут либо удобство, либо паранойная безопасность вместе с кучей бойлерплейта. По мне, первое лучше - в реальной жизни нужно определять всего 1-2 метода, остальное получаешь бесплатно.
Не зря же в кресты добавили static_assert и за счет него с кучей бойлерплейта в стандартной библиотеке - часть ошибок сделали или сделают удобочитаемыми или обнаруживаемыми во время компияции. А это как вы понимаете - мейнстрим. Хаскелу и прочим с него стоило взять пример.