你能在scala中强制执行Map键的详尽性吗?

时间:2018-03-28 11:51:17

标签: scala

假设我们有一个像这样的枚举值索引的地图

sealed trait A
case object B extends A
case object C extends A

type SafeMap = Map[A, String]

是否有可能以某种方式强制执行此类地图的详尽无遗? 也许与依赖类型?如果不是在斯卡拉,那么伊德里斯也很有趣。

为了澄清,我希望对任何检查Map都有为每个ADT变体定义的条目的ADT都有一个通用约束。

1 个答案:

答案 0 :(得分:2)

ADT Map[A,String]的{​​{1}}几乎是一个函数A

你可以做到

A => String

使用编译器的致命警告标志(否则非详尽的模式匹配只是警告),这应该会让你走得很远。

PS:你应该把你的案例类/对象定为最终