如何在Haskell中为自定义Numbers类型实现指定next函数
实现建议
首先你给出的Numbers类型定义不符合Haskell基础语法规则:代数数据类型的构造子必须以大写英文字母开头,不能直接使用字符串字面量作为构造子,建议先修正类型定义:
-- 派生Eq和Show实例方便调试和相等性判断 data Numbers = One | Two | Three | Four | Five deriving (Eq, Show)
接下来直接用模式匹配就能实现next函数,你要求输入对应4的值时不返回5,这里默认按循环逻辑设置4的下一个值为1,你可以按需修改对应分支的返回值:
next :: Numbers -> Numbers next One = Two next Two = Three next Three = Four next Four = One -- 该分支不返回Five,符合要求,可替换为其他合法的Numbers类型值 next Five = One -- 该分支逻辑可按需调整,也可改为抛出错误,但推荐覆盖所有构造子避免运行时异常
如果你确实需要构造子和数字字符串强绑定,可以开启PatternSynonyms语言扩展实现字符串字面量匹配,对新手来说优先用上面的基础实现即可。
内容的提问来源于stack exchange,提问作者Obsidian_42
相关产品推荐
相关产品推荐

