在Data Constructor中使用`Maybe`

时间:2014-06-16 03:21:39

标签: haskell

我正在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可以附加到任何数据类型实例,即构造函数?

如果我使用了错误的术语(数据类型,构造函数等),请纠正我。

1 个答案:

答案 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两个参数 - 对于其方程中的每个模式都有一个参数。