haskell - 确定代数数据结构的类型
问题描述
假设data MyAlgebraicType :: Foo Int | Bar Int
。如果我有一个类型的变量,MyAlgebraicType
我如何确定它是 aFoo Int
还是 a Bar Int
?
解决方案
使用case
:
let var = Bar 42 in
case var of
Foo _ -> putStrLn "It's a Foo!"
Bar _ -> putStrLn "It's a Bar!"
这些_
可以用变量名替换以绑定所Int
包含的内容。
您还可以使用模式匹配定义(比 更常见case
):
tellMeIt :: MyAlgebraicType -> IO ()
tellMeIt (Foo _) = putStrLn "It's a Foo!"
tellMeIt (Bar _) = putStrLn "It's a Bar!"
推荐阅读
- javascript - 如何在 JavaScript 代码中使用 JMeter 变量?
- bulk - 反应管理员:访问
- 来自 bulkActions 的记录
- java - 我想通过 Java 访问 rundeck 并获取失败的作业列表并重新启动它们
- .net - 如何通过名称找到 Unicode 字符?
- python - 当我将 nan 分配给其中一个时,为什么所有数据帧都变成 nan
- python - 如何有效地使用基类
- javascript - 我在article-section的文章不会全部从顶部开始,而是被拖到底部。为什么他们不从顶部生成?
- android - 如何使用 RxJava 观察布尔字段
- typescript - 如何使用“桶文件”导入扩展方法?
- angular - 无法使用 viewchildren Angular 专注于 Mat 卡