小编qwe*_*938的帖子

typeclass bimap怎么没有循环定义

我在理解这段代码时缺少什么关键的直觉?我不明白这些是如何组成的。首先需要一个函数(a->c)和构造类型(fab)。然而,第二次产量(时尚)。此外,第一和第二是根据看起来循环的双图来定义的。

class Bifunctor f where
  bimap :: (a -> c) -> (b -> d) -> f a b -> f c d
  bimap g h = first g . second h
  first :: (a -> c) -> f a b -> f c b
  first g = bimap g id
  second :: (b -> d) -> f a b -> f a d
  second = bimap id
Run Code Online (Sandbox Code Playgroud)

haskell

3
推荐指数
1
解决办法
133
查看次数

Reader函子实例如何满足fmap?

我正在阅读 Bartosz Milewski 所著的《程序员的范畴论》,第 12 页。164 他为 Reader Functor 引入了一个自然变换:

newtype Reader e a = Reader (e -> a)

instance Functor (Reader e) where
   fmap f (Reader g) = Reader (\x -> f (g x))
Run Code Online (Sandbox Code Playgroud)

我很难理解这种转换的类型签名。

我最好的猜测是这样的:

fmap :: (a -> b) -> (Reader e -> a) -> (Reader e -> b)
Run Code Online (Sandbox Code Playgroud)

我很困惑的是,函子是在部分应用 Reader 的情况下声明的Reader e,然后在第二行上声明fg这是两个函数参数。然后,有一个 lambda 表达式x。由于 没有值x,我假设Reader(\x -> ....)lambda 表达式已部分应用。是否x引用了一些外部值?在哪里e发挥作用?

那么,fmap实例如何满足呢fmap …

haskell

2
推荐指数
1
解决办法
261
查看次数

标签 统计

haskell ×2