> Подразумевается, что я сейчас побегу заменять ADT на композируемую систему классов типов с геттерами и сеттерами, сдабривать это Template Haskell поверх для преобразования ADT<>TC и создания инстансов, и всё это ради того, чтобы в Haskell у меня появилась вещь, которая есть в С++, O'Caml и Scala by design и никаких сложностей не вызывает?
Конечно, нет. Это вещь редко нужная, и вам, скорее всего не понадобится.
А Template Haskell - бяка.
> Ну таки там у вас ошибка, полиморфная рекурсия.
> Единственная известная мне система, где полиморфная рекурсия тайпчекается, это исчисление Милнера-Майкрофта, для которого, походу, ещё даже нет доказательства разрешимости тайпчека.
Странно, в Java пример тайпчекается, в C# тайпчекается, в Haskell тайпчекается. А вот во всяких сишечках, с плюсами и без - ну никак.
> ошибку языка: дженерики, которые не подлежат type erasure.
Ну, вот в C# нет type erasure, а пример в шарпе работает.
no subject
То есть, нет. Ясно.
> Подразумевается, что я сейчас побегу заменять ADT на композируемую систему классов типов с геттерами и сеттерами, сдабривать это Template Haskell поверх для преобразования ADT<>TC и создания инстансов, и всё это ради того, чтобы в Haskell у меня появилась вещь, которая есть в С++, O'Caml и Scala by design и никаких сложностей не вызывает?
Конечно, нет. Это вещь редко нужная, и вам, скорее всего не понадобится.
А Template Haskell - бяка.
> Ну таки там у вас ошибка, полиморфная рекурсия.
> Единственная известная мне система, где полиморфная рекурсия тайпчекается, это исчисление Милнера-Майкрофта, для которого, походу, ещё даже нет доказательства разрешимости тайпчека.
Странно, в Java пример тайпчекается, в C# тайпчекается, в Haskell тайпчекается. А вот во всяких сишечках, с плюсами и без - ну никак.
> ошибку языка: дженерики, которые не подлежат type erasure.
Ну, вот в C# нет type erasure, а пример в шарпе работает.