gpt4 book ai didi

haskell - 如何为三级类型构造函数 (ext3) 的类型扩展定义 SYB 函数?

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

Scrap Your Boilerplate package , 在 Data.Generics.Aliases ,有些函数允许对一元和二元类型构造函数进行类型扩展。特别是对 ext1 有定义和 ext2 .

现在,ext1ext2根据 dataCast1 定义, 和 dataCast2 ,它们是 Data 的一部分type 类,通常由 DeriveDataTypeable 定义机械。但是,没有 dataCast3 ,所以我没有看到定义 ext3 的简单方法.

是否可以定义 ext3 ,如果是这样,如何?

最佳答案

我很确定这还不够。但感觉很接近。

ext3 :: (Data a, Typeable3 t)
=> c a
-> (forall d1 d2 d3. c (t d1 d2 d3))
-> c a
ext3 def ext = maybe def (id) (gcast3' ext)

gcast3' :: (Typeable3 t, Data a) => c (t f g h) -> Maybe (c a)
gcast3' x = r
where
r = if typeOf3 (getArg x) == typeOf3' (getArg (fromJust r))
then Just $ unsafeCoerce x
else Nothing
getArg :: c x -> x
getArg = undefined
typeOf3' z = mkTyConApp (typeRepTyCon (typeOf z)) []

关于haskell - 如何为三级类型构造函数 (ext3) 的类型扩展定义 SYB 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14447050/

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