我正在Haskell中实现todo
命令行应用程序。感谢Learn You a Haskell的挑战。
特别是,我对我Action
数据类型的Action
数据构造函数(基本上应该是枚举)感到好奇。
data Action = Add | View | Delete -- 3 options for the tood list
...
execute :: (Maybe Action) -> IO a
execute Just Add = print "Add not supported"
execute Just View = view
execute Just Delete = print "Delete not supported"
execute None = print "invalid user input"
通过ghc --make ...
进行编译时,出现错误:
Not in scope: data constructor
None'`
如何正确使用Maybe Action
?我是否错误地认为Maybe
可以附加到任何数据类型实例,即构造函数?
如果我使用了错误的术语(数据类型,构造函数等),请纠正我。
答案 0 :(得分:6)
您获得的具体错误是因为Maybe
的空构造函数是Nothing
,而不是None
。但是,一旦你修复了,你就会得到一些令人困惑的错误信息,因为你需要加上括号。
execute :: (Maybe Action) -> IO a
execute (Just Add) = print "Add not supported"
execute (Just View) = view
execute (Just Delete) = print "Delete not supported"
execute Nothing = print "invalid user input"
否则,它会假设你要execute
有两个参数 - 对于其方程中的每个模式都有一个参数。