Специализни шаблонца! (udpn) wrote,
Специализни шаблонца!
udpn

Type classes +

Классы типов с математическими названиями в Haskell это всё-таки большой обман.

Вот, например, монада. Можно определить что-нибудь с операцией join, но при этом никто не гарантирует, что это действительно будет монадой. Нужно просто "знать", что монадические законы у нас исполняются. Обычно полагаются на то, что автор задумался об этом при написании инстанса, и ничего страшного.

Проблема в том, что при таком подходе мы не можем полагаться на вывод типов, если определим, например, группоид и полугруппу: класс типов для полугруппы не будет ничего добавлять к группоиду, в коде не будет ни одного вызова чего бы то ни было, что указывало бы на использование свойств полугруппы.

Проблема с несколькими инстансами одного класса типов в Haskell, конечно, решается через newtype. Для списков два инстанса можно пережить, но замыкать один тип относительно нескольких операций (сложения, умножения) уже неприятно.

Поэтому я считаю, что если вы используете классы типов не только для решения лабораторных работ по Haskell, нужно всё-таки переходить на что-нибудь более серьёзное, например, Idris или Agda (возможно, Scala, за неё пусть адепты расскажут), пусть даже без проверки тотальности.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 118 comments