GADT 和平等证明

GADT and proof of equality

我想在 GADT 中隐藏一些类型信息,这里忘记了 key 类型

data Query  where
   Query :: Ord key =>  Map.Map key String  -> Query

 one ::  Ord key => key -> Query
 one  k =
   let m = Map.insert k "hello" Map.empty
   in Query m

如何传递一些等式约束以在其他地方使用它,如:

other :: Ord key => key -> Query -> Maybe String
other k (Query ad) =  Map.lookup k ad

– 1 月 6 日左右 17:19

如果你只是保持类型变量可见——但普遍量化——那么其他人也必须抽象地对待它,但当你想要访问它并应用你有的任何约束时它仍然存在。 — 如果你真的有一个全局证明所有的键都具有相同的类型,那么你根本不应该把它变成一个变量。如果您只有两个或三个这样的类型(并且不打算允许更多),您也不应该使用类型变量,而应该使用具有用于不同实例化的离散选项的变体类型。