如何获取类型的默认值?

阴影模板

我正在尝试在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的默认值?提前谢谢了!

丹尼尔·格拉泽(Daniel Gratzer)

你不能 没有办法神奇地创建任何类型的值。

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala默认值:如何在创建LinkedList时从Scala中的Any类型获取默认值?

来自分类Dev

如何从PARAMDESC获取默认值

来自分类Dev

如何获取Session Waring的默认值?

来自分类Dev

获取日期的默认值

来自分类Dev

获取元素或默认值?

来自分类Dev

获取日期的默认值

来自分类Dev

如何设置枚举类型变量的默认值?

来自分类Dev

如何以正确的参数类型返回参数的默认值?

来自分类Dev

如何获取XML中定义的ListPreference的默认值?

来自分类Dev

创建新对象后如何获取对象的默认值?

来自分类Dev

如何通过休息提交的表单上获取默认值?

来自分类Dev

Delphi如何使用RTTI获取属性的默认值

来自分类Dev

Lift-如何使用WiringUI获取select的默认值

来自分类Dev

我如何丰富我的bash单线以获取默认值

来自分类Dev

Delphi如何使用RTTI获取属性的默认值

来自分类Dev

select2如何获取默认值

来自分类Dev

如何使用angularjs在输入中获取默认值?

来自分类Dev

如何从组件 vue.js 获取默认值?

来自分类Dev

如何获取 MySQL 中空表的列的默认值?

来自分类Dev

给定类型的更好默认值

来自分类Dev

AngularJS输入类型=数字默认值

来自分类Dev

通用约束类型默认值

来自分类Dev

Scala中类型参数的默认值

来自分类Dev

elementType道具类型验证默认值

来自分类Dev

使用Union类型设置默认值

来自分类Dev

使用默认值创建复合类型

来自分类Dev

为通用类型分配默认值

来自分类Dev

AngularJS输入类型=数字默认值

来自分类Dev

iOS int类型默认值问题