使用SYB只将一次转换应用到一棵树而不是everywhere的最佳方式是什么?例如,在下面的简化表达式中,有几个Var "x"的实例,我只想用Var "y"替换第一个实例。 data Exp = Var String | Val Int | Plus Exp Exp |... myExp = Val 5 `Plus` Var "x" `Plus` Val 5 `Plus` Var "x" ...
在Scrap your boilerplate reloaded中,作者描述了Scrap Your Boilerplate的新演示文稿,它应该与原文相同。 然而,一个区别是,它们假定一个有限的,闭集“基地”类型,具有GADT data Type :: * -> * where
Int :: Type Int
List :: Type a -> Type [a]
...
我有一个类型类Cyclic我希望能够提供泛型实例。 class Cyclic g where
gen :: g
rot :: g -> g
ord :: g -> Int
考虑之类无参构造函数, data T3 = A | B | C deriving (Generic, Show)
我要生成实例相当于这一个: instance Cyclic T3 where
我想了解Constr类型的Data.Data包。考虑下面的会议。 dataTypeConstrs返回一列Constr,这是Maybe的零参数和单参数构造函数。由于明显的类型错误,试图重新创建列表失败。 GHC关于Constr价值的特殊行为是什么? $ ghci
GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help
Prelu
所以,我有具有大量的情况下,这是由一种“注释”类型 data Expr a = Plus a Int Int
| ...
| Times a Int Int
我有参数的AST数据类型注释类型S和T,以及一些功能f :: S -> T。我想采用Expr S并将其转换为Expr T,使用我的转换f对每个S发生在Expr值内。 有没有办法做到这一点使用SYB或泛型,并避免在每种情
与this question相关我今天早些时候问过。 我有大量的案例,这是由“注释”型 data Expr ann def var = Plus a Int Int
| ...
| Times a Int Int
deriving (Data, Typeable, Functor)
我有具体事例为高清和VAR参数的AST数据类型,说Def和Var。 我想要的是自动