Я пишу приложение, которое использует строки UTF-16, и чтобы использовать расширение перегруженных строк, я попытался создать для него экземпляр IsString
:
import Data.Word ( Word16 )
import Data.String ( IsString(fromString) )
type String16 = [Word16]
instance IsString [Word16] where
fromString = encodeUTF16
encodeUTF16 :: String -> String16
Проблема в том, что когда я пытаюсь скомпилировать модуль, GHC 7.0.3 жалуется:
Data/String16.hs:35:10:
Illegal instance declaration for `IsString [Word16]'
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use -XFlexibleInstances if you want to disable this.)
In the instance declaration for `IsString [Word16]'
Если я прокомментирую объявление экземпляра, он успешно компилируется.
Почему это отвергается? Экземпляр для [Char]
выглядит примерно как одно и то же, но он отлично компилируется. Есть что-то, что я пропустил?