在 ghci 提示符everywhere (mkT (\x -> 2 * x)) (8.7, 21, "word")计算结果为(8.7, 42, "word") 。 我预计 8.7 也会翻倍。 为什么我错了? ...
在 ghci 提示符everywhere (mkT (\x -> 2 * x)) (8.7, 21, "word")计算结果为(8.7, 42, "word") 。 我预计 8.7 也会翻倍。 为什么我错了? ...
一般来说,我想知道是否有一种方法可以编写通用折叠来概括应用forall类型的函数,例如: 给定一些数据类型D ,其中instance Data (D a) (可能对a有约束)。 False `mkQ` isJust ,甚至可以考虑像False `mkQ` isJust这样简单的False `m ...
由于我不熟悉 rank-N 类型,因此gfoldl的类型签名对我来说很麻烦: 我能想到的唯一函数分别是\\xs y -> ($y) <$> xs和pure 。 其他函数如gunfold和gmapT也有类似的问题。 那么它们的重要用途有哪些值得注意的例子呢? ...
我正在寻找一个函数,给定必要的返回类型,该函数将纯粹基于传递给函数的类型结构来返回与该类型匹配的产品参数部分。 例如: 同样,对于相同的功能func ,但不同的产品: 是否存在这样的功能? 我觉得应该可以,也许使用Generic 。 我知道这在其他语言中也是可行的,例如 ...
假设我们以下列方式表示公司层次结构: 我想这defne提高没有一个公司资产的工资函数Boss的祖先,其部门有一个Bad的表现。 这样的功能可以很容易地定义如下: 问题是这需要很多样板(为了讨论起见,请假设给出了CompanyAsset且不能更改)。 所以我的问题是,是否有 ...
所以我想折叠一棵树 除了一些特殊情况。 我想做一些类似的事情 所有特殊情况都生成结果列表,最后一个案例只是递归折叠; 但这不起作用,因为作为gmapQ的第一个参数的函数必须为forall d. Data d => d -> u类型forall d. Data d ...
我正在尝试创建一些代码,可以采用任何递归语法数据类型和该数据类型的任何表达式,并生成相同类型的所有子表达式的列表,构建,类似于scan的递归类型。 我在下面写了两个手动示例,附带玩具计算器语法类型EExp 。 第一个示例使用Lens库中的棱镜和镜头,仅适用于一个eg1示例表达式,而第二个 ...
我一直在使用一些废弃的样板功能。 尽管如此,我试图编译导入模块Data.Data和Data.Typeable ,但像一些功能everywhere和mkT不能被编译器发现。 新版GHC中的这些功能在哪里? ...
我试图了解Data.Data包的Constr类型。 考虑下面的会议。 dataTypeConstrs返回一个Constr列表,Maybe的参数为零和一。 由于明显的类型错误,尝试重新创建列表失败。 这是GHC在诠释价值方面的一种特殊行为吗? ...
我写了一个程序,用 Haskell-src-exts 访问 AST。 我正在尝试将其转换为使用 GHC API。 前者使用 Uniplate,而后者似乎不幸的是我被迫使用 SYB(文档非常稀缺)。 这是原始代码: 我需要访问函数绑定、匹配和表达式。 这是我设法写的(不工作): 它抱怨id实 ...
我可以使用SYB的gfoldl一次性完成listify结果的映射吗? 考虑以下代码: 我不喜欢在numVal函数中我必须考虑Expr类型的不同数据构造函数,而我只对Num构造函数感兴趣。 我宁愿用下面的vals函数替换isNum和numVals: 这可以用gfoldl完成 ...
Data定义为其核心功能之一gfoldl : c和c (d -> b)的目的是什么? 为什么它不仅仅是一个常规的折叠,类似于 ...
我看到有人在讨论Scrap Your Boilerplate和Haskell中的泛型编程 。 这些术语是什么意思? 我什么时候想要使用Scrap Your Boilerplate,我该如何使用它? ...
我今天早些时候问过这个问题 。 我有一个包含大量案例的AST数据类型,它通过“注释”类型进行参数化 Def和Var说我有def和var的具体实例。 我想要的是自动派生fmap ,它在第一个参数上作为fmap函数运行。 我想派生一个如下所示的函数: 当我使用普通的fm ...
所以,我有一个包含大量案例的AST数据类型,它通过“注释”类型进行参数化 我有注释类型S和T ,以及一些函数f :: S -> T 我想使用Expr S并使用我在每个S上的转换f将其转换为Expr T ,这发生在Expr值中。 有没有办法使用SYB或泛型来做到这一点,并避免 ...
我一直在使用用Haskell编写的Elm编译器。 我想开始为它实现一些优化,其中一部分涉及遍历AST并向某些节点添加“注释”,例如尾调用等。 我知道我可以使用SYB或uniplate进行遍历,但我想知道是否有一种无样板的方法来处理类型。 所以,假设我们的AST有一堆代数类型: ...
与GHC Generics相比,是否只有SYB才能完成或简化任务? ...
关于SYB,我是初学者 我尝试拧干代码以使用该代码获取表达式中的变量 其中removeDuplicate消除列表中的重复变量 ExprVar是我的数据类型数据类型还分别包括ExprAdd , Exprsub , ExprMul , ExprDiv , ExprNum用于加法, ...
给定一种数据类型 什么是简单的定义 这样的 它基本上与syb的gfindtype相反。 或者这样的事情已经存在了吗? 我已经尝试了类型并且没有找到太多,但是syb类型很难解释。 返回Nothing的函数也是可以接受的。 ...
我有一个希望能够提供通用实例的Cyclic类型类。 给定零类型构造函数的总和类型, 我想生成一个与此等效的实例: 我试图像这样计算出所需的Generic机械 现在,我可以使用GCyclic提供Cyclic默认实现: 但是我的GCyclic实例不正确。 从 ...