- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题有一个很长的前奏,然后我才能真正问出来:)
假设类型 A 和 B 代表类别,那么函数
f :: B -> A
g :: C -> B -> A
g' :: (C -> C)
g :: (C -> C) -> (B -> A)
最佳答案
在这里谈论“类别之间的态射”听起来像是一个可能的类别错误(哈,哈)。在 Haskell 中,我们最常谈论一个所谓的类别 哈斯克 ,这是其对象是类型 *
的类别的一些不一致的理想化 (0) 版本态射是函数。如果它们不是 的态射,则不清楚类别之间的“功能”是什么。哈斯克 .
另一方面,在更一般的设置中,您当然可以定义一个类别,其对象是其他类别(1),具有您想要的任何态射,以满足必要的属性。通常的例子是 猫 , 类别 small categories其态射是仿函数。
也就是说,无论哪种情况,您的问题的答案都基本相同。要谈论两个对象之间的态射集合,就好像该集合本身就是一个对象——即,作为其他态射的源或目的地——你需要一个对象来扮演这个角色,并且需要某种方式来间接地谈论态射,以便你可以来回翻译。
如果我们已经有一种方法可以将对象对作为单个对象(通常称为某种“乘积”)进行讨论,那么一种方法是定义态射集合 A⊗B→C 和态射 A→CB 的集合,它允许对象 CB 代表态射 B→C 的集合。
如果有问题的“对象对”实际上是 categorical product , 我们有 a cartesian closed category , 这两个 哈斯克和 猫 是。在 Haskell 中,上述等价函数是 curry
和 uncurry
(2)。
当然,这不是谈论态射作为对象的唯一方式。一般概念简称为“封闭范畴”。但是,如果您正在考虑高阶函数和函数式编程,那么您可能会想到一个笛卡尔封闭类别。
(0) 这通常涉及诸如假装 ⊥ 不存在(因此所有函数都是全部的)以及将产生相同输出的函数视为相同的事情(例如,忽略性能差异)。
(1) 但是不要试图谈论对象都是类别的类别,否则Bertrand Russell's会给你生意的。
(2) 当然,以 the logician Haskell Curry 命名.
关于haskell - 由于柯里化(Currying),arity-n 的函数真的只是一个 n 类吗?可以做成 1 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12571161/
在 Ruby 中,我知道 Method#arity 将返回一个值,表示方法接受的参数数量,但我不知道为什么它被称为 arity。任何人都可以深入了解为什么它会存在于这样一个看似随机的命名空间中吗?另外
为什么 proc 和 lambda 返回不同的元数值? 例如 proc { |x = 0| }.arity #=> 0 lambda { |a = 0| }.arity #
昨晚我试图做一些关于接受和调用通用函数的事情(即类型在调用站点是已知的,但可能因调用站点而异,因此定义应该是跨arities的通用函数)。 例如,假设我有一个函数 f: (A, B, C, ...)
我有这个类/对象图: 我不明白为什么根据给定的类图,该对象图无效。 在对象图中,一个 C 对象与两个 T 对象有两个链接,一个 T 对象是 alpha 关系,另一个 T 对象是 beta 关系。 所以
我正在使用 Arity 算术引擎进行计算。所以我想知道当我使用时可能出现哪些异常 double res = Symbols.eval("string"); 我将其包含在 try block 中 try
大家好,我最近遇到了 Arity 库 -> source can be found here并发现它使用 .eval() 方法将字符串评估为算术运算,查看源代码我发现了 Symbols 对象的此方法:
我有时发现在 Clojure 中定义函数的简化版本很方便,它返回一个部分函数,例如 (defn prefix ([pre string] (str pre ":" string))
给定以下代码: type Function0 = () => T; type Function1 = (arg1: A1) => T; type Function2 = (arg1: A1, arg2
在 Elixir 中处理可变数量而不导致不必要的复杂性和案例匹配的最佳实践是什么? Python 示例: def function_with_optional_param(param1, param2
这里有一些关于这个的讨论,但我有一些具体的问题我无法找到答案。所以,直呼,我的意思是 =>T类型,0-arity 函数我的意思是 () => T 我理解(我认为)概念上的差异,但可能我遗漏了一些东西,
我经常发现自己想要在 map 迭代器中强制一元元数,这样只有第一个参数 - 项目值 - 被传递(省略键/索引和迭代器),以避免重载组合功能。 我需要这种情况的示例如下: var parts = [
这个问题已经有答案了: Why clojure's vector function definition is so verbose? (2 个回答) 已关闭 6 年前。 这是 update-in 的
我在编写类似 foo.map(case Foobar(x,y) => something) 的代码时遇到错误。后来我发现我必须使用大括号来包裹匿名函数(case Foobar(x,y) => some
我正在清理遗留代码。里面我有一个1986年的优先队列^_^。在将它与 C++ 接口(interface)连接后,它越来越不符合标准。我在“市场”(std + boost)上的所有 priority_q
我需要根据 boost::function 对象的元数(参数计数)在 BOOST_PP_IF 语句中做出决定。这可能吗? boost::function_types::function_arity 做
我正在尝试根据作为参数传递给它的 lambda 的元数来专门化模板函数。这是我想出的解决方案: template struct helper; template struct helper {
我正在尝试创建一个可以使用带有 0、1 或 2 个参数的 lambda 调用的函数。由于我需要代码在 g++ 4.5 和 vs2010(不支持可变参数模板或 lambda 转换为函数指针)上工作,所以
让我们考虑一个具体的例子。我有很多函数接受可变数量的参数,并返回 Seq[T] .说: def nonNeg(start: Int, count: Int): Seq[Int] = Itera
例如,我有一些使用多方法的代码,理想情况下希望重载函数(在本例中为多功能),以便我可以传递更高阶的函数来帮助进行测试。 这是示例: (ns multi) (defn my-print [m] (pri
我目前正在编写具有未定义数量的函数,因此我在 clojure.core 等中寻找示例。 例如,这是 comp (clojure.core) 的定义 (defn comp "Takes a set
我是一名优秀的程序员,十分优秀!