我剛剛用Haskell創建了一個類,但是我的某個實例有問題。我創建了這個類:非法實例聲明
class Symbol a where
nameSym :: a -> String
這些實例:
instance Symbol Double where
nameSym db = show db
instance Symbol String where
nameSym str = str
但在編譯的時候,我得到了以下錯誤消息:
Illegal instance declaration for `Symbol String'
(All instance types must be of the form (T t1 ... tn)
where T is not a synonym.
In the instance declaration for `Symbol String'
你知道是什麼問題?
字符串是一個類型的同義詞,你可以使用[Char]或者一些允許實例中的類型同義詞的編譯器選項。 – Ingo
按照GHC的建議啓用'FlexibleInstances'。這種擴展是無害的,很久以來已被許多圖書館使用。 – chi
'[Char]'在默認規則下也不是有效的實例頭 - 你仍然需要'FlexibleInstances'。 – user2407038