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