Vig*_*igo 2 haskell class instance
我刚刚用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'
你知道这是什么问题吗?
问题是它String是一个类型别名,[Char]Haskell 98规范不允许在类型别名上定义实例.这可以通过在文件的标题中添加它来解决:
{-# LANGUAGE TypeSynonymInstances #-}
但是,仍然不允许你编译程序,因为Haskell 98也不允许实例[SomeConcreteType](只允许实例[a]- 感谢Ørjan指出那个实例),而Haskell中存在一个解决方法98没有使用语言编译指示,解决这个问题的最简单方法(也是完全安全和惯用)是添加以下编译指示:
{-# LANGUAGE FlexibleInstances #-}
- 这也使TypeSynonymInstances你不需要保留两个pragma.
| 归档时间: | 
 | 
| 查看次数: | 512 次 | 
| 最近记录: |