Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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_Scrap Your Boilerplate - Fatal编程技术网

了解数据类型。Haskell的数据包

了解数据类型。Haskell的数据包,haskell,scrap-your-boilerplate,Haskell,Scrap Your Boilerplate,我正在努力理解数据的构造类型。数据包。请考虑下面的会话。code>dataTypeConstrs返回一个Constr列表,其中包括0参数构造函数和1参数构造函数。由于明显的类型错误,尝试重新创建列表失败。这是GHC关于CONTR价值的特殊行为吗 $ ghci GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help Prelude> :set -XScopedTypeVariables Prelude> :modul

我正在努力理解数据的构造类型。数据包。请考虑下面的会话。code>dataTypeConstrs返回一个
Constr
列表,其中包括0参数构造函数和1参数构造函数。由于明显的类型错误,尝试重新创建列表失败。这是GHC关于CONTR价值的特殊行为吗

$ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Prelude> :set -XScopedTypeVariables
Prelude> :module +Data.Data
Prelude Data.Data> dataTypeConstrs (dataTypeOf (Nothing :: Maybe ()))
[Nothing,Just]
Prelude Data.Data> :i it
it :: [Constr]  -- Defined at <interactive>:4:1

Prelude Data.Data> let i2 :: [Constr] = [Nothing,Just]

<interactive>:6:23:
    Couldn't match expected type ‘Constr’ with actual type ‘Maybe a0’
    In the expression: Nothing
    In the expression: [Nothing, Just]
$ghci
GHCi,7.10.2版:http://www.haskell.org/ghc/  :? 求救
序曲>:set-XScopedTypeVariables
序曲>:模块+数据.Data
前奏曲Data.Data>dataTypeConstrs(dataTypeOf(Nothing::Maybe())
[没什么,只是]
前奏曲数据。数据>:i it
它::[Constr]——定义为:4:1
前奏曲数据。数据>让i2::[Constr]=[没有,只是]
:6:23:
无法将预期类型“Constr”与实际类型“Maybe a0”匹配
在表达中:什么都没有
在表达式中:[没什么,只是]

这不是实际构造函数的列表,而是构造函数表示的列表。它的
Show
实例使用快速而松散的输出,这使它看起来像是其他东西

只要假装它是

[ Constr{ name = "Nothing", args = 0, ... }
, Constr{ name = "Just", args = 1, ... }
]
但它是以一种松散的方式显示的


更准确地说,这是内部不透明的构造函数表示。使用
constr*
观察者检查类型为
constr

的值,该值不是实际构造函数的列表,而是构造函数表示的列表。它的
Show
实例使用快速而松散的输出,这使它看起来像是其他东西

只要假装它是

[ Constr{ name = "Nothing", args = 0, ... }
, Constr{ name = "Just", args = 1, ... }
]
但它是以一种松散的方式显示的


更准确地说,这是内部不透明的构造函数表示。使用
constr*
观察者检查类型
constr

有趣问题的值。在查看Data.Data时,我看到有用于创建Constr实例的函数。像MKContr。我猜Show for Constr的实例并没有提供足够的细节来实际构造一个Constr,因为您正在尝试回答12个有趣的问题。在查看Data.Data时,我看到有用于创建Constr实例的函数。像MKContr。我猜Show for Constr的实例没有提供足够的细节来实际构造Constr,因为您正在尝试使用i2Indeed,我错过了Constr
instance Show Constr的Show实例,其中Show=constring
,其中显示了构造函数的名称。只是一个很好的老可怜的节目设计问题,谢谢!实际上,我错过了Constr
instance Show Constr的Show实例,其中Show=constring
显示了构造函数的名称。只是一个很好的老可怜的节目设计问题,谢谢!