【发布时间】:2014-05-22 04:08:14
【问题描述】:
所以只是为了让初学者(不一定排除我自己)将此上下文化,函子是 A 级上下文/映射抽象。斯卡拉纳语:
trait FunctorStr[F[_]] {
def map[A, B](f: A => B): F[A] => F[B]
}
很多东西都是仿函数等等,现在如果你对泛型编程和作为设计模式的 DSL 制作感兴趣,仿函数就会出现很多。因此,为了与扩展直觉的主题保持一致,让我们开始吧。在comonad.com's Rotten Bananas 进行到一半时,我们被介绍给 Cata 类
在哈斯克尔语中给出:
class Cata f t | t -> f where
cata:: (f a -> a) -> t -> a
现在这个类对我们读者来说是乐趣的开始,但对我来说是 scala 实现者...... Cata是我们麻烦的开始
这个函数依赖t -> f 是否意味着“f 由 t 唯一确定”?
如果你问Miles Sabin in 2011
Fundep 模式在 scala 中完全可以实现,简单地说,就是通过隐式参数部分启动隐式搜索并见证类型以解决搜索,但我不能说我得到它以至于立即将 t -> f 转换为 scala
我在 scala 中看到它类似于
abstract class Cata[F[_], T](implicit e: ???) {
def cata[A]: (F[A] => A) => T => A
}
trait CataFunctor[F[_]] extends FunctorStr[({type l[x] = Cata[F, x]})#l] {
def map[A, B](f: A => B): Cata[F, A] => Cata[F, B]
}
引用文章:
给定 cata 和 fmap 一个人可以通过并建立一个完整的主机 其他递归方案,paramorphisms,zygomorphisms,histomorphisms, 广义的变质,...;动物园非常令人生畏,而且 这些可用于以鲁莽的方式撕裂协变函子 放弃。借助变形的力量,你重新推导了 一般递归,因此您基本上可以编写任何递归 你想要的功能。 (在房子的余代数一侧有 anamorphisms,apomorphisms,以及各种其他的野兽 有效地生成协变函子)
这就是我寻求的力量。
我正在努力解决这个问题,真的需要帮助吗?现在我已经在 scalaz 中实现了 InvariantFunctor,所以我知道这不是傻事。
我可以在这里向正确的方向轻推吗?我对尽可能多的细节感到失望,所以,发疯吧。
【问题讨论】:
标签: scala generics haskell recursion