我正在尝试在Haskell中建立图表ADT。我不知道如何获取通用类型的默认值。
type Node = Int
type Element a = (Node, a, [Int]) --Node: ID; a: generic value; [Int]: adjancent nodes' IDs
type Graph a = [Element a]
insNode :: Graph a -> Node -> Graph a
insNode g n = g ++ [(n,?,[])]
我要写些什么代替?为了获取类型a的默认值?提前谢谢了!
你不能 没有办法神奇地创建任何类型的值。
有undefined :: a
,但是如果评估过,将导致程序崩溃。相反,我建议
type Element a = (Node, Maybe a, [Int]) -- It's optional to have a value
要么
insNode :: a -> Node -> Graph a -> Graph a
-- Optional idea, use `Data.Default` to ease the typing burden
defInsNode :: Def a => Node -> Graph a -> Graph a
defInsNode = insNode def
使用第一个选项,您可以坚持Nothing
使用(实际上是您拥有的),或者使用第二个选项,您仅要求用户提供值。
最后,建议使用样式注释,而不是使用元组的同义词
type Node = Int
data Element a = Element { node :: Node
, val :: Maybe a
, edges :: [Node]}
deriving (Eq, Show)
现在,您可以Elements
使用Element node val edges
和进行模式匹配的方式几乎相同。超过2个元素的元组通常是错误的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句