相关疑难解决方法(0)

值在哪里适合Hask类别?

所以我们有Hask类别,其中:

  • 类型是类别的对象
  • 函数是类别中从一个对象到另一个对象的态射.

同样Functor我们有:

  • 一个Type构造函数,用于将对象从一个类别映射到另一个类别
  • fmap 用于将态射从一个类别映射到另一个类别.

现在,当我们编写程序时,我们基本上会转换值(而不是类型),似乎Hask的类别根本不讨论值.我试图在整个等式中拟合值,并得出以下观察结果:

  • 每个类型本身就是一个类别.例如:Int是所有整数的类别.
  • 从值到相同类型的另一个值的函数是类别的态射.例如:Int -> Int
  • 从一个值到另一个不同类型的值的函数是用于将一种类型的值映射到另一种类型的函数.

现在我的问题是 - 在Hask类别(或一般类别理论)中,值是否有意义?如果是,那么任何关于它的参考或如果没有,那么任何原因.

我希望这个问题有道理:)

haskell category-theory

24
推荐指数
4
解决办法
1961
查看次数

为什么只有Applicative需要`pure`而没有Functor?

阅读这篇关于Haskell和类别理论基础知识的Wikibook,我学习了Functors:

仿函数本质上是类别之间的转换,因此给定类别C和D,仿函数F:C - > D.

将C中的任何对象A映射到D中的F(A).

映射态射f:A - > B在C到F(f):F(A) - > F(B)在D.

......听起来很不错.后来提供了一个例子:

我们也有一个示例实例:

instance Functor Maybe where
  fmap f (Just x) = Just (f x)
  fmap _ Nothing  = Nothing
Run Code Online (Sandbox Code Playgroud)

这是关键部分:类型构造函数可能将任何类型T转换为新类型,也许T.此外,fmap仅限于Maybe类型需要函数a - > b函数可能a - >可能b.但就是这样!我们已经定义了两个部分,一部分将Hask中的对象转换为另一个类别中的对象(Maybe类型和函数在Maybe类型上定义),以及将Hask中的态射视为此类别中的态射的东西.所以也许是一个算子.

我理解定义fmap是关键的.我很困惑"类型构造函数Maybe"如何提供第一部分.我宁愿期待类似的东西pure.

如果我做对了,Maybe而不是映射C到D.(因此是类别级别的态射,这可能是Functor的要求)

我想你可以像这样重新解释我的问题:是否有一个没有明显实现的Functor pure?

haskell functor category-theory

11
推荐指数
1
解决办法
1303
查看次数

在类Functor的声明中,类型变量可以是函数类型吗?

在Haskell中,该类Functor声明为:

class   Functor f   where
fmap    ::  (a  ->  b)  ->  f   a   ->  f   b
Run Code Online (Sandbox Code Playgroud)

可以输入变量a和b是函数类型,或者他们必须是非功能类型?

如果它们可以是函数类型,那么就可以使类应用于具有任意数量的参数的函数而言,类是否与class Functor有效地相同?根据赫顿在《 Haskell编程》中所说:Applicativefmap

函子抽象了fmap将功能映射到结构的每个元素上的想法 。应用程序将此想法概括为允许 fmap映射具有任意数量参数的映射函数,而不是仅限于具有单个参数的函数。

适用:

fmap0 ::  a   ->  f   a
fmap0 =   pure
fmap1 ::  (a  ->  b)  ->  f   a   ->  f   b
fmap1 g   x   =   pure    g   <*> x
fmap2 ::  (a  ->  b   ->  c)  ->  f   a   ->  f   b   -> …
Run Code Online (Sandbox Code Playgroud)

haskell functor applicative

5
推荐指数
3
解决办法
160
查看次数

为什么 Haskell 的 `Functor` 实例不定义一个“类似返回”的函数?

在范畴论中,函子是范畴之间的态射,即将范畴中的每个对象映射A到 中的另一个对象B,并将每个态射映射C -> D到 中的各个对象B,同时保留态射的组合。因此,我们可以说函子由两个“部分”组成,一个将对象映射到对象,另一个将态射映射到态射。在Haskell中,如果我理解正确的话,Functor类型类中的每个类型都可以“映射到”,即类型的函数a -> b可以映射到函数上F a -> F b。现在为什么不存在return :: Functor f => a -> f a专门用于 的函数Functor?是否没有必要,因为我们可以简单地利用实例return中的定义Monad,因为 return 实际上只对 Monad 的函子部分起作用,还是还有其他原因?

这让我觉得很奇怪,因为如果真是这样,为什么不return包含在Functor实例中?我的意思是每个单子都有一个函子部分,所以对我来说,这是有道理的。有人能在这方面启发我吗?

haskell category-theory

4
推荐指数
1
解决办法
131
查看次数

标签 统计

haskell ×4

category-theory ×3

functor ×2

applicative ×1