- 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>>
Fai 07.11.2012 22:22 # +1
LispGovno 08.11.2012 10:24 # 0
bormand 08.11.2012 12:23 # +1
LispGovno 08.11.2012 12:31 # 0
Можете поподробнее рассказать, а то гуглится обычный хардкодный в компиляторе дерайвинг.
bormand 08.11.2012 12:51 # +1
Data.Derive is a library and a tool for deriving instances for Haskell programs.
P.S. Только загуглил. Не читал. Никаких гарантий, что это то.
3.14159265 07.11.2012 22:24 # +7
Заходишь на говнокод - и видишь на главной одно непонятное УГ.
LispGovno 07.11.2012 22:28 # −2
zim 07.11.2012 22:32 # +4
Лол.
А сравнение не пашет, потому что ты его не определил. Надо было либо
, либо
roman-kashitsyn 07.11.2012 22:42 # +4
Если в классе типов есть полиморфные функции без реализации по-умолчанию, компилятор не даст тебе объявить экземпляр, не предоставив реализаций.
FAIL
3.14159265 07.11.2012 22:50 # 0
Только С++ его и терпит.
LispGovno 07.11.2012 22:53 # +1
Цитирую себя:
> если забыл переопределить какой-то метод, то получаешь следующее поведение
> забыл
В случае с Eq это обычно не проблема, тк операторов мало, ты их знаешь и надо быть идиотом, чтобы забыть какой-то, а вот если что-то посложнее - надежный Хаскель покажет дулю во время выполнения перед заказчиком. Могли бы уж запилить контракты на обязательное переопределение хотябы одного метода или не устраивать такую вахканалию.
roman-kashitsyn 07.11.2012 23:45 # +1
Тут либо удобство, либо паранойная безопасность вместе с кучей бойлерплейта. По мне, первое лучше - в реальной жизни нужно определять всего 1-2 метода, остальное получаешь бесплатно.
LispGovno 07.11.2012 23:50 # 0
Не зря же в кресты добавили static_assert и за счет него с кучей бойлерплейта в стандартной библиотеке - часть ошибок сделали или сделают удобочитаемыми или обнаруживаемыми во время компияции. А это как вы понимаете - мейнстрим. Хаскелу и прочим с него стоило взять пример.
roman-kashitsyn 08.11.2012 00:06 # 0
LispGovno 08.11.2012 00:13 # 0
Steve_Brown 08.11.2012 10:12 # 0
LispGovno 08.11.2012 10:27 # 0
LispGovno 08.11.2012 10:32 # 0
ganzzz 24.08.2021 02:32 # 0