неприятный инцидент с долгим дебагом.
Объявлялся newtype и instance Show для него, и по недосмотру он был определен так:
instance Show MyNT where
show s = show s <> "blah!"
Вопрос, есть ли что-либо, что однозначно поймает такой кейс на стадии компиляции? У нас включен -Wall -Werror, и даже есть линтинг через Stan, но всё равно проскочило.
hlint?
ну, этот код В ДАННОМ случае раценивается как неправильный, но вообще это валидный код который имеет место быть, для работы с бесконечными стримами например
хотя не уверен
- warn: {lhs: "instance Show x"...
Очевидно, надо предоставить доказательство, что show завершается
хотя это глобально бить будет
хотя может лучше Show дерайвить и бить по рукам за ручные инстансы, а претти-принтеры писать уже но я рулы для хлинта не писал, так что надо пробовать
да, нужно именно потенциальную бесконечную рекурсию в show но не в списках, например
дерайвить тоже можно, только как тогда лучше всего делать кастомный формат с дополнительными суффиксами? Через отдельный тайпкласс?
не понял про суффиксы
ну там newtype создан только для того, чтобы в Show a => ... при выводе добавлял к оригинальному значению некоторый суффикс, который отображает единицу измерения
А, блин, наверное, на Haskell этого не получится сделать
хм, ну тогда лучше свой тайпкласс
но это потенциально не остановит завязаться на Show и в инстансе применить show, чего хотелось бы избежать, как я понял
не, избежать хотелось бы рекурсии бесконечной
задача минимизировать количество подобных foot-guns для всех новичков
в тему https://gitlab.haskell.org/ghc/ghc/-/issues/9207
Хрюкнул
Agda
Ну как бы да, но нет конечно
При этом мой линейный менеджер не против затестить где-нибудь unison, только нет для этого проекта реалистичного
Ограничьте размер стека. Если стек вышибает, это обычно легко отдебажить. У Митчелл про это несколько постов есть
Мы сейчас ограничили через -M, а какой флаг ограничивает тот самый «стек»?
А кто такой Митчелл?
https://ndmitchell.com
А, точно, спасибо! Стоило человеку в Фейсбук уйти и я про него забыл :-)
Обсуждают сегодня