
On Sat, 12 Jan 2013, Roman Cheplyaka wrote:
* Henning Thielemann
[2013-01-12 13:42:56+0100] If you can easily avoid using an extension, like in the case of the TypeSynonymInstances and FlexibleInstances in case-insensitive then this seems better to me, than adding FlexibleInstances to all Haskell compilers and Haskell tools (haddock, hlint, etc.), going through a Haskell Prime proposal procedure, etc.
I am not so sure here. That helper method or type class is just an ugly hack to work around a limitation of the type class system. Using it does not improve the code itself.
It improves because the code becomes more generic - you get a reasonable instance for all list types with a character like element. So to speak, avoiding FlexibleInstances is more flexible here.
GHC shows that there's a way to lift this limitation (and it's been known for many years). Is that extension controversial in the type systems community? Why?
In my opinion if String needs special treatment and there is no reasonable generic list instance then String should be avoided and a custom type should be used. (This also applies to showList.) FlexibleInstances are dangerous because they can yield conflicting instances that are not orphan. Although I think that can only happen with multiple parameter type classes.