首页 > 解决方案 > 确定代数数据结构的类型

问题描述

假设data MyAlgebraicType :: Foo Int | Bar Int。如果我有一个类型的变量,MyAlgebraicType我如何确定它是 aFoo Int还是 a Bar Int

标签: haskellfunctional-programmingalgebraic-data-types

解决方案


使用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!"

推荐阅读