Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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_Custom Data Type - Fatal编程技术网

Haskell 定义的数据类型是否未定义?

Haskell 定义的数据类型是否未定义?,haskell,custom-data-type,Haskell,Custom Data Type,我需要一些帮助来理解这些定义的原因 data SegmentList = SegmentList SegmentlistHeader [Segment] | AugmentedSegmentList SegmentlistHeader [AugmentedSegment] deriving (Show) data SegmentlistHeader = SegmentlistHeader DatabaseName Query LabelType TimeStam

我需要一些帮助来理解这些定义的原因

data SegmentList
    = SegmentList SegmentlistHeader [Segment]
    | AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
    deriving (Show)

data SegmentlistHeader
    = SegmentlistHeader DatabaseName Query LabelType TimeStamp
    deriving (Show)

data Segment
    = Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
    | AugmentedSegment SegmentLabel SegmentStart SegmentEnd Session Checksum Metadata
    deriving (Show)

type DatabaseName = String
type SegmentLabel = String
type SegmentStart = Double
type SegmentEnd = Double
type Session = String
type LabelType = String
type Query = String
type TimeStamp = String
type Checksum = String
type Metadata = [(String, String)]
导致此错误消息:

Not in scope: type constructor or class `AugmentedSegment'
A data constructor of that name is in scope; did you mean -XDataKinds?
而这:

data UmeQueryPart
    = LabelInLabelType String [String] String
    | LabelType String
    | UmeQueryDominance UmeQueryPart UmeQueryPart String
    | UmeQuerySequence UmeQueryPart UmeQueryPart String
    | UmeQueryIntersect [UmeQueryPart]
    | UmeQueryUnion [UmeQueryPart]
    deriving Show

编译得像个符咒。很明显,我没有足够的技能来了解差异…

从您的编辑中,您已经

data SegmentList
    = SegmentList SegmentlistHeader [Segment]
    | AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
    deriving (Show)

data Segment
    = Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
    | AugmentedSegment SegmentLabel SegmentStart SegmentEnd Session Checksum Metadata
    deriving (Show)
问题具体来自
段列表的第二个构造函数:

AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
这里您已经说过,
AugmentedSegmentList
包含
AugmentedSegment
的列表,但是
AugmentedSegment
段的构造函数,它不是一种类型。定义数据类型时,它只能引用其他类型,不能引用其他构造函数。你可以把它改成

AugmentedSegmentList SegmentlistHeader [Segment]
但这可能不是你想要的。由于除了添加
元数据
字段外,您的
增强段
构造函数是相同的,因此我建议使用

data Segment
    = Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
    deriving (Show)

data AugmentedSegment
    = AugmentedSegment Segment Metadata
    deriving (Show)
然后,您可以只拥有由类型系统强制执行的
AugmentedSegment
s列表,但这也意味着您不能将
AugmentedSegment
传递给接受
段的函数。因为这些看起来是不同的东西,所以这不应该是一个问题。如果是,则始终可以将包含的
字段从
AugmentedSegment
传递到您所关心的函数中,或者您可以更改函数以接受类型为
的值,而不是segmentedsegment


总之,当你有

data MyType = MyConstructor FieldA FieldB FieldC

MyType
符号是类型的名称,
MyConstructor
符号是一个构造函数,您可以将其视为返回类型为
MyType
的函数,
字段n
s符号都必须是现有类型,或者可以递归引用
MyType
,它们不能是其他构造函数。这就是您看到的错误的原因。

从您的编辑中,您已经

data SegmentList
    = SegmentList SegmentlistHeader [Segment]
    | AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
    deriving (Show)

data Segment
    = Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
    | AugmentedSegment SegmentLabel SegmentStart SegmentEnd Session Checksum Metadata
    deriving (Show)
问题具体来自
段列表的第二个构造函数:

AugmentedSegmentList SegmentlistHeader [AugmentedSegment]
这里您已经说过,
AugmentedSegmentList
包含
AugmentedSegment
的列表,但是
AugmentedSegment
段的构造函数,它不是一种类型。定义数据类型时,它只能引用其他类型,不能引用其他构造函数。你可以把它改成

AugmentedSegmentList SegmentlistHeader [Segment]
但这可能不是你想要的。由于除了添加
元数据
字段外,您的
增强段
构造函数是相同的,因此我建议使用

data Segment
    = Segment SegmentLabel SegmentStart SegmentEnd Session Checksum
    deriving (Show)

data AugmentedSegment
    = AugmentedSegment Segment Metadata
    deriving (Show)
然后,您可以只拥有由类型系统强制执行的
AugmentedSegment
s列表,但这也意味着您不能将
AugmentedSegment
传递给接受
段的函数。因为这些看起来是不同的东西,所以这不应该是一个问题。如果是,则始终可以将包含的
字段从
AugmentedSegment
传递到您所关心的函数中,或者您可以更改函数以接受类型为
的值,而不是segmentedsegment


总之,当你有

data MyType = MyConstructor FieldA FieldB FieldC

MyType
符号是类型的名称,
MyConstructor
符号是一个构造函数,您可以将其视为返回类型为
MyType
的函数,
字段n
s符号都必须是现有类型,或者可以递归引用
MyType
,它们不能是其他构造函数。这就是导致您看到的错误的原因。

错误来自哪一行?我也看不到它-是否缺少某些内容(产生此错误的部分)-似乎缺少更多内容-例如,
SegmentPlus
(或者我只是缺少了它)?对此表示抱歉。我在玩不同版本的东西。不过还是一样的错误。现在应该完成了。错误来自
[AugmentedSegment]
的那一行,即“A”的位置。错误来自哪一行?我也看不到它-是否缺少某些内容(产生此错误的部分)-似乎缺少更多内容-例如,
SegmentPlus
的位置(或者我只是错过了它)?对此表示抱歉。我在玩不同版本的东西。不过还是一样的错误。现在应该完成了。错误来自
[AugmentedSegment]
行,即“A”所在的位置。是的!就这样。谢谢对就这样。谢谢