История изменений
Исправление AndreyKl, (текущая версия) :
Спасибо. Здесь, как ты можешь видишь, error просто имеет любой тип. Это как раз и есть чит. Мы обманываем систему типов чтобы было удобно работать.
Но «честную» функцию то ты не можешь описать. Внутри системы типов, без чита, у тебя нет функции которую ты опишешь для этой монады.
Значит монаду ты не описал.
Значит, данная конктреная монада не контейнер лишь потому что она и не монада вовсе.
А если бы мы рассмотрели (гипотетическую) систему типов уровнем выше, то это была бы информация об ошибке (при попытке создания экземпляра пустого типа). Т.е. что то вроде Either, которая очевидно, контейнер.
Исправление AndreyKl, :
Спасибо. Здесь, как ты можешь видишь, error просто имеет любой тип. Это как раз и есть чит. Мы обманываем систему типов чтобы было удобно работать.
Но «честную» функцию то ты не можешь описать. Внутри системы типов, без чита, у тебя нет функции которую ты опишешь для этой монады.
Значит монаду ты не описал.
Значит, данная конктреная монада не контейнер лишь потому что она и не монада вовсе.
А если бы мы рассмотрели (гипотетическую) систему типов уровнем выше, то это была бы информация об ошибке (при попытке создания экземпляра пустого типа).
Исходная версия AndreyKl, :
Спасибо. Здесь, как ты можешь видишь, error просто имеет любой тип. Это как раз и есть чит. Мы обманываем систему типов чтобы было удобно работать.
Но «честную» функцию то ты не можешь описать. Внутри системы типов, без чита, у тебя нет функции которую ты опишешь для этой монады.
Значит монаду ты не описал.
Значит, данная конктреная монада не контейнер лишь потому что она и не монада вовсе.