“模式匹配”关于可输入类型
例如,假设我们有以下数据结构:
data Foo = Bool Bool | Int Int | Double Double
现在,有没有更简单的方法来做到这一点:
foo :: Typeable a => a -> Foo
foo x = maybe (error "i dunno") id $
liftM Bool (cast x) `mplus`
liftM Int (cast x) `mplus`
liftM Double (cast x)
有人考虑过为 Typeable 类型创建模式匹配语法吗?
Suppose, for example, we have the following data structure:
data Foo = Bool Bool | Int Int | Double Double
Now, is there an easier way to do this:
foo :: Typeable a => a -> Foo
foo x = maybe (error "i dunno") id $
liftM Bool (cast x) `mplus`
liftM Int (cast x) `mplus`
liftM Double (cast x)
Has someone thought of making a syntax for pattern matching on Typeable types?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
使用
typeOf
和守卫:Use
typeOf
and guards:您可以在这里使用视图模式,它们是非常方便的扩展。
结果:
You can use view patterns here, they are quite handy extension.
Results:
此版本不限于
Bool
、Int
或Double
,但String
会显示为 <代码>[字符]。This version doesn't limit itself to
Bool
,Int
, orDouble
, but aString
comes out as[Char]
.