Mzk*_*evi 5 generics recursion haskell scala
因此,仅为了初学者(不一定要排除我自己)的情境化,仿函数是A级上下文/映射抽象.在Scalanese:
trait FunctorStr[F[_]] {
def map[A, B](f: A => B): F[A] => F[B]
}
Run Code Online (Sandbox Code Playgroud)
很多东西都是算子等等,现在如果你对通用编程和DSL制作感兴趣,那么设计模式的算子会出现很多.因此,为了与扩展直觉的主题保持一致,让我们深入了解它.在comonad.com的Rotten Bananas中途,我们被介绍到Cata班
在Haskellese中给出:
class Cata f t | t -> f where
cata:: (f a -> a) -> t -> a
Run Code Online (Sandbox Code Playgroud)
现在这个班级已接近我们读者的乐趣之初,但对我而言,scala实施者...... Cata是我们麻烦的开始
这个函数依赖 t -> f是否意味着"f由t唯一确定"?如果你在2011年问过Miles Sabin,
那么fundep模式在scala中完全可以实现,并且只需要通过隐式参数部分启动隐式搜索并见证类型来解决搜索,但我不能说我得到它以便立即翻译t -> f斯卡拉
我在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]
}
Run Code Online (Sandbox Code Playgroud)
引用文章:
给定cata和fmap可以通过并建立一整套其他递归方案,paramorphisms,zygomorphisms,histomorphisms,generalized catamorphisms,...; 动物园是非常令人生畏的,这些可以用来撕裂协变的仿函数而不顾一切地放弃.借助于paramorphism的力量,你重新获得了一般递归的概念,因此你基本上可以编写你想要的任何递归函数.(在房子的代数边上有变形,同态和各种其他有效生成协变仿函数的野兽)
这就是我寻求的力量.
我正在努力解决这个问题并且真的想要一些帮助吗?现在我已经在scalaz中实现了InvariantFunctor,所以我知道这不是一个傻瓜差事.
我可以在这里轻推方向吗?我想尽可能多的细节,所以,坚持下去.
阅读链接的帖子,您似乎需要:
trait CataDep[T, F[_]]
abstract class Cata[F[_], T](implicit e: CataDep[T, F]) {
def cata[A]: (F[A] => A) => T => A
}
Run Code Online (Sandbox Code Playgroud)