问题标签 [polyvariadic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 在 Haskell 中,我如何获取一个 m 元谓词和一个 n 元谓词并构造一个 (m+n) 元谓词?
今天,我尝试使用类型类来归纳构造任意数量的谓词的函数,将任意类型的任意组合作为输入,返回相同类型但应用了一些基本操作的其他谓词。例如
将返回一个谓词,该谓词对于大于 2 的偶数计算为真,并且
会返回=
一切都很好,让这部分工作,但它提出了一个问题,如果我想将两个谓词的连接定义为一个谓词,每个连接谓词的每个输入都需要一个输入,该怎么办?例如:
将返回 Ord a => a -> a -> Bool -> Bool。这可以做到吗?如果是这样,怎么做?
go - Go 中的可变参数泛型参数
假设我想在 Go 中为 Slices制作等效的JavaScript函数。Array.splice
我有以下代码:
此示例将有效,但仅适用于 type 的参数int
。我想让它成为通用的,并且我知道我应该给可变参数elements
提供 type interface{}
,但是如何从函数内部创建一个具有该接口类型的新切片?
换句话说,如何根据函数第一行中的参数类型动态指定切片的类型,在哪里newslice
创建?
c++ - 具有可变函数参数的 C++ 多态性
我正在与您分享一个使用可变参数函数参数的类所遇到的问题。它是下面代码中显示的类 Thread。它是 std::thread 的包装器,以便使用函数模式。
我想在这个函数中使用多态性将类 Thread 继承到一个新类 Functor 中,但是 gcc 返回以下错误:
我真的不明白这个错误,因为纯虚函数在派生类中定义得很好。但是,将函数 run() 移动到派生类 (Functor) 中,它可以工作。
在此先感谢, Caner
haskell - 多元广义和
这个答案演示了一个对其参数求和的多变量函数:
我为以下所有成员创建了此函数的通用版本Num
:
但是,这只适用于像mySum (1::Int) (3::Int) (2::Int) :: Int
. 如果没有参数上的类型说明符,我会收到此错误:
没有因使用“mySum”而产生 (MySumType n0 Float) 的实例
可能的修复:为 (MySumType n0 Float) 添加一个实例声明
在表达式中:mySum 1.0 :: Float
在 `it' 的等式中:it = mySum 1.0 :: Float
是什么导致了这个问题,我该如何解决?我怀疑这与整数文字的类型有关Num a => a
。还有与上述不依赖扩展的等效功能吗?上面使用的是多参数类型类和灵活实例。
haskell - 为什么这个多变量函数需要类型注释?
这是一个简单的多变量函数,以 为模型Text.Printf.printf
:
它在没有任何类型注释的 ghci 中工作正常:
但是,当我删除SumArg a
约束时……</p>
…它失败:
怎么来的?
(老实说,我对第一个版本的参数不需要类型注释这一事实感到更加困惑。)
function - 多变量咖喱定义中的不明确类型变量
所以,我正在尝试实现一个多变量 ZipWithN,如此处所述。不幸的是,Paczesiowa 的代码似乎是用过时版本的 ghc 和 HList 编译的,所以在试图理解它是如何工作的过程中,我也一直在将它移植到这两个版本的最新版本(ghc- 7.8.3 和 HList-0.3.4.1)。这很有趣。
无论如何,我在中间函数的定义中遇到了一个谷歌没有帮助我修复的错误curryN'
。从概念上讲,curryN'
很简单:它接受一个类型级别的自然数N
(或者,严格来说,该类型的值)和一个函数f
,其第一个参数是一个长度为 HList 的函数N
,并返回一个N
-ary 函数,该函数接受一个 HList出它的第一个N
参数,并返回f
应用于该 HList。是curry
,但是是多变量的。
它使用三个辅助函数/类:
第一个是ResultType
/ resultType
,正如我在这里定义的那样。 resultType
将单个函数作为参数,并在将其应用于尽可能多的参数后返回该函数的类型。(严格来说,它再次返回该类型的未定义值)。
例如:
(后一种情况是因为如果a
碰巧是 type 的函数x -> y
, resultType 必须返回y
。所以它并不完美地应用于多态函数。)
后两个是Eat
/eat
和MComp
/ ,像这样mcomp
一起定义(连同curryN'
)在单个文件(连同损坏的curryN'
)中。
eat
的第一个参数是一个类型为自然数的值N
,并返回一个函数,该函数接受N
参数并将它们组合成一个 HList:
据我所知,它完美无缺。 mcomp
是一个多变量组合函数。它需要两个函数,f
并且g
,其中f
需要一些参数N
。它返回一个接受N
参数的函数,应用于f
所有参数,然后g
应用于f
. (函数顺序平行(>>>)
多于(.)
)
就像resultType
,它在返回类型是类型变量的函数上“中断”,但由于我只打算在eat
(其最终返回类型只是一个HList
)上使用它,它应该可以工作(至少 Paczesiowa 似乎是这么认为的)。它确实如此,如果第一个参数eat
是固定的:
工作正常。
curryN'
但是,定义如下:
但是,尝试将其加载到 ghci 中会出现以下错误:
很清楚eat
,mcomp
不要像我希望的那样玩得那么好。顺便说一句,这与给出的那种错误有很大不同mcomp (+) (+1)
,后者抱怨MComp
.
无论如何,尝试查找有关此错误的信息并没有让我找到任何有用的信息 - 我自己调试的最大障碍是我什至不知道类型变量f0
是什么,因为它没有出现在任何类型中ghci 推断的签名或上下文。
我最好的猜测是,mcomp
通过 's 的多态返回类型进行递归时遇到了麻烦eat
(即使它是由类型级自然数固定的)。但如果是这样的话,我不知道我将如何解决它。
另外(对我来说很奇怪),如果我尝试将其合并Part1.hs
到Part2.hs
一个文件中,我仍然会收到一个错误......但是一个不同的
再次使用神秘的f0
类型变量。我承认我对所有这些 typehackery 有点不知所措,所以如果有人能帮我弄清楚这里到底是什么问题,更重要的是,我该如何解决它(如果是的话,希望,可能),我将非常感激。
最后说明:这里的两个文件之所以叫Part1和Part3,是因为Part2里面有一些辅助函数用到了zipWithN
,而没有curryN'
。在大多数情况下,它们工作正常,但我稍后可能会问一些奇怪的问题。
haskell - Printf 类函数
我正在尝试编写一个具有任意数量参数的函数。这些参数可以是 Int 或 String。我对整数有疑问。出于某种原因(我不明白),值 1 成为歧义的来源。如何处理这个错误,它的根源是什么?
在上述情况下,我遇到了错误
编辑
感谢 user5402 指出了 ghci 和 ghc 之间的区别。Ghci默认启用扩展 ExtendedDefaultRules
因此,加上三行,我的示例可以正常工作。
haskell - 我怎样才能把这个解析器变成一个适用的、多变量的解析器?
我正在尝试解析日期,例如09/10/2015 17:20:52
:
我有一种预感,某种zipWithN
会概括listUncurry
。也许某种foldl ($)
?
作为一个附带问题(出于好奇),parsec
解析器可以生成使用吗?
haskell - Haskell,多变量函数和类型推断
在寻找多变量函数示例时,我发现了这个资源: StackOverflow:如何创建多变量 haskell 函数?,并且有一个这样的答案片段:
然后我们可以使用:
出于好奇,我尝试对其进行了一些更改,因为乍一看我发现它非常棘手,因此我进入了这个:
我只是更改Integer
为Int
并instance (Integral a, SumRes r) => SumRes (a -> r) where
减少了多态性instance (SumRes r) => SumRes (Int -> r) where
要编译它,我必须设置XFlexibleInstances
标志。当我尝试测试sumOf
功能时,我遇到了一个问题:
然后我尝试了:
考虑到我们在类型类中使用,为什么 Haskell 不能Int
在这种情况下推断出我们想要一个?Int
SumRes
haskell - 为什么我会发生冲突?
所以我输入了这个
我得到
事情是,但m
不能m->a
平等!为什么它给我一个冲突?(另外,关于如何制作多变量 mconcat 的任何提示(以printf
图书馆的风格)?