gpt4 book ai didi

haskell - 使用 Typeable 对不同类型进行有效的大小写匹配

转载 作者:行者123 更新时间:2023-12-02 10:56:48 25 4
gpt4 key购买 nike

我大致想要实现以下目标:

f :: a -> a
g :: b -> b

h :: Typeable t => t -> Maybe t
h x = case x of
(x is of type a) -> Just (f x)
(x is of type b) -> Just (g x)
_ -> Nothing

最佳答案

这是我在 my earlier comment 中概述的想法的代码。您需要ScopedTypeVariables告诉阐述者调用哪种类型 eqT .

infixl 4 <?>
(<?>) :: forall a b. (Typeable a, Typeable b) => (a -> a) -> b -> Maybe b
f <?> x = fmap (\Refl -> f x) (eqT :: Maybe (a :~: b))

h :: Typeable t => t -> Maybe t
h x = f <?> x
<|> g <?> x

可能需要一些解释。 f <?> x尝试申请fx ,如果其类型匹配。 eqT :: (Typeable a, Typeable b) => Maybe (a :~: b) 测试两者Typeable字典看看 ab是同一类型。如果是,则返回 Just Refl ,GADT 证明它们是同一类型。 Refl 上的模式匹配正如我在 lambda 中所做的那样,将这种相等性纳入范围。在 lambda GHC 的体内知道 a ~ b ,这样我们就可以安全地申请 fx .

关于haskell - 使用 Typeable 对不同类型进行有效的大小写匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44886170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com