Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 重载列表扩展不工作_Haskell_Language Extension - Fatal编程技术网

Haskell 重载列表扩展不工作

Haskell 重载列表扩展不工作,haskell,language-extension,Haskell,Language Extension,GHC 7.8中的重载列表语言pragma非常吸引人,因此我决定尝试一下: {-# LANGUAGE OverloadedLists #-} import Data.Set (Set) import qualified Data.Set as Set mySet :: Set Int mySet = [1,2,3] 编译器给了我: No inst

GHC 7.8中的重载列表语言pragma非常吸引人,因此我决定尝试一下:

{-# LANGUAGE OverloadedLists #-}

import Data.Set (Set)                                                                     
import qualified Data.Set as Set

mySet :: Set Int
mySet = [1,2,3]
编译器给了我:

    No instance for (GHC.Exts.IsList (Set Int))
      arising from an overloaded list
    In the expression: [1, 2, 3]
    In an equation for ‘mySet’: mySet = [1, 2, 3]

    No instance for (Num (GHC.Exts.Item (Set Int)))
      arising from the literal ‘1’
    In the expression: 1
    In the expression: [1, 2, 3]
    In an equation for ‘mySet’: mySet = [1, 2, 3]
Failed, modules loaded: none.
甚至发行说明中的示例也不起作用:

> ['0' .. '9'] :: Set Char

<interactive>:5:1:
    Couldn't match type ‘GHC.Exts.Item (Set Char)’ with ‘Char’
    Expected type: [Char] -> Set Char
      Actual type: [GHC.Exts.Item (Set Char)] -> Set Char
    In the expression: ['0' .. '9'] :: Set Char
    In an equation for ‘it’: it = ['0' .. '9'] :: Set Char
['0'..'9']::设置字符
:5:1:
无法将类型“GHC.Exts.Item(Set Char)”与“Char”匹配
预期类型:[Char]->Set Char
实际类型:[GHC.Exts.Item(设置字符)]->设置字符
在表达式中:['0'..'9']::Set Char
在“it”的方程式中:it=['0'..'9']::Set Char

有人知道这里发生了什么吗?

只定义了一个微不足道的实例。您可以为
数据定义自己的实例。使用以下方法设置

{-# LANGUAGE TypeFamilies #-}

instance IsList (Set a) where
  type Item (Set a) = a
  fromList = Data.Set.fromList
  toList = Data.Set.toList

请注意,
IsList
仅适用于GHC>=7.8。

它在错误中说:
没有(GHC.Exts.IsList(Set Int))的实例。
Data.Set
不为
IsList
定义实例。你可以很容易地自己编写这个实例,下面是一个类:很不幸,我原以为这些实例是内置的。还要注意,你也需要使用
TypeFamilies
pragma才能工作。谢谢你指出这一点;我已相应地编辑了答案。