- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道到什么程度Functor
Haskell 中的实例由仿函数定律(唯一)确定。
自 ghc
可以得出Functor
至少对于“普通”数据类型的实例,它们似乎至少在各种情况下必须是唯一的。
为方便起见,Functor
定义和仿函数定律是:
class Functor f where
fmap :: (a -> b) -> f a -> f b
fmap id = id
fmap (g . h) = (fmap g) . (fmap h)
问题:
能否推导出 map
的定义从假设它是Functor
开始data List a = Nil | Cons a (List a)
的实例?如果是这样,必须做出哪些假设才能做到这一点?
是否有任何 Haskell 数据类型具有多个 Functor
满足仿函数定律的实例?
什么时候可以ghc
得出 functor
例如,什么时候不能?
所有这些都取决于我们如何定义平等吗? Functor
法律以值(value)平等的形式表达,但我们不要求 Functors
有Eq
实例。那么这里有什么选择吗?
关于平等,肯定有一个我称之为“构造函数平等”的概念,它使我们能够推断 [a,a,a]
“等于”[a,a,a]
对于 a
的任何值任何类型,即使 a
没有(==)
为其定义的。所有其他(有用的)平等概念可能都比这种等价关系更粗糙。但我怀疑 Functor
中的平等法律更多地是一种“推理平等”关系,并且可以针对具体应用。对此有什么想法吗?
最佳答案
参见 Brent Yorgey 的 Typeclassopedia :
Unlike some other type classes we will encounter, a given type has at most one valid instance of Functor. This can be proven via the free theorem for the type of fmap. In fact, GHC can automatically derive Functor instances for many data types.
关于haskell - Functor 实例是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45517390/
我想在不创建仿函数类的情况下使用仿函数,但即使我将匹配的字符串存储在 foundVector 中,我的 foundVector 仍显示为空。 也告诉我有没有更好的方法来使用fucntors 我正在使用
在阅读类型类时,我发现 Functor、Applicative Functor 和 Monad 之间的关系是严格递增的权力。仿函数是可以映射的类型。 Applicative Functors 可以做同
我对在 Java 中使用仿函数(函数对象)很感兴趣。通过快速谷歌搜索,我找到了这 3 个包: Java 泛型算法:http://jga.sourceforge.net/ 公共(public)仿函数:h
我是 Haskell 的新手。我做了一个类型 Maybe3。 data Maybe3 a= Just3 a| Unknown3 | Missing3 deriving (Show, Eq, Ord)
在研究了基于 MacLane、Awodey 和 Spivak 书籍的类别理论之后,我试图理解 Haskell 中的自由/操作单子(monad)。 我们可以使用 Control.Monad.Free 从
我正在努力深入了解 Monad类的层次结构。当然,其中一部分是看到很多例子,但我对这些类是如何首次发现的历史及其动机特别感兴趣。 我了解 Monad s 最初是作为 Haskell 中 IO 问题的解
我有一个多项式 data Poly a = Poly [a] 我希望能够做类似 fmap (take 3) polynomial 的事情但我不能,因为 Poly不是真正的仿函数,因为 f我在 fmap
我想知道到什么程度Functor Haskell 中的实例由仿函数定律(唯一地)确定。 由于ghc可以推导出Functor对于至少“普通”数据类型的实例,似乎它们至少在各种情况下必须是唯一的。 为方便
我想知道到什么程度Functor Haskell 中的实例由仿函数定律(唯一)确定。 自 ghc可以得出Functor至少对于“普通”数据类型的实例,它们似乎至少在各种情况下必须是唯一的。 为方便起见
有这种类型: {-# LANGUAGE GADTs #-} data Rgb a = (Num a, Show a) => Rgb a a a 我完全能够实现 Show 类型类: instance S
背景。在我的一个类中,我们一直在探索Parser monad。 Parser monad 通常定义为 newtype Parser a = Parser (String -> [(a, String)
我正在尝试使用 length streaming-bytestring Data.ByteString.Streaming.Char8 库的函数。 我看到返回值的类型为Of,但我不清楚如何检查它。我尝
我正在尝试编写一个多态的 map (Functor) 但我遇到了这种类型的错误。 给定以下类型 type Result = | Success of 'TSuccess | Error
我一直在努力理解 Haskell 中的 Functor 是什么,为此我想要一个没有任何其他属性的 Functor 示例。 我想出的工作示例是 data MyFunctor a b = MyFuncto
我正在努力将 GHC/Arr.hs 移植到弗雷格。 数组定义: data Array i e = Array{u,l::i,n::Int,elems::(JArray e)} 有函数: amap ::
我不认为这是可能的,如果它是或为什么不是这样,我很好奇: class A { } 我想将 A 的实例视为函数,例如 A a = new A(); a(); or a(3); etc... 这是为了在特
我正在使用 C++ 模板传入 Strategy 仿函数以更改函数的行为。它工作正常。我传递的仿函数是一个没有存储的无状态类,它只是以经典的仿函数方式重载 () 运算符。 template int f
我有一个类,我试图指向其成员函数,问题是我不断收到此错误 reference to non-static member function must be called根据我的理解,需要指向一个成员函数
我一直潜伏在这里,试图弄清楚 Functor 是否可以做我需要它做的事情。 我想做的是包装对类方法的调用,并以某种方式捕获函数返回的值。鉴于我的 Functor 类,我需要做些什么才能将我的评论转化为
我想用 c++ 编写一个函数,它接受一个 int 类型的变量,它的作用是定义一个仿函数的重载运算符 () 并将该仿函数作为输出参数返回。例如: template Functor myFunc(doub
我是一名优秀的程序员,十分优秀!