使用值test
调用函数x
比使用case
表达式更容易吗?
data FooBar = Foo Int | Bar String
test :: Maybe Int -> Bool -- Int from Foo constructor
x :: FooBar
答案 0 :(得分:2)
一种更简单的方法是定义一个帮助程序,让您在那里找到一部分:
data FooBar = Foo Int | Bar String
foo :: FooBar -> Maybe Int
foo (Foo x) = Just x
foo _ = Nothing
test :: Maybe Int -> Bool
x :: FooBar
result :: Bool
result = test . foo $ x
如果你是定义test
的人,你也可以用不同的方式定义它,以便让自己更轻松:
test' :: FooBar -> Bool
test' (Foo x) = (some logic)
test' _ = (the default value)
有一个简洁的概念称为" prism"模拟这个一般概念 - 从和类型中提取数据 - 优雅。但他们有点难以理解,他们是否可以被认为是"惯用的"很有争议。
答案 1 :(得分:-1)
您可以在将FooBar
作为参数处理的函数中使用保护或模式匹配。