gpt4 book ai didi

scala - Scala 中涉及函数依赖的泛型编程和烂香蕉

转载 作者:行者123 更新时间:2023-12-04 21:15:50 25 4
gpt4 key购买 nike

所以只是为了让初学者(不一定排除我自己)上下文化,仿函数是 A 级上下文/映射抽象。斯卡拉语:

trait FunctorStr[F[_]] {
def map[A, B](f: A => B): F[A] => F[B]
}

很多东西都是仿函数等等,现在如果你对泛型编程和 DSL 制作作为一种设计模式感兴趣,仿函数会出现很多。因此,根据扩展直觉的主题,让我们深入研究它。中途 comonad.com's Rotten Bananas我们被介绍到类 Cata

用 haskell 语给出:
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 中看到它就像
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]
}

引用文章:

given cata and fmap one can go through and build up a whole host of other recursion schemes, paramorphisms, zygomorphisms, histomorphisms, generalized catamorphisms, ...; the menagerie is quite forbidding and these can be used to tear apart covariant functors with reckless abandon. With the power of a paramorphism you rederive the notion of general recursion, and so you can basically write any recursive function you want. (On the coalgebra side of the house there are anamorphisms, apomorphisms, and all sorts of other beasts for effectively generating covariant functors)



这就是我寻求的力量。

我正在努力解决这个问题,真的需要一些帮助吗?现在我已经在 scalaz 中实现了 InvariantFunctor,所以我知道这不是一个傻瓜差事。

我可以在这里朝正确的方向插入吗?我想尽可能多的细节,所以,去疯了。

最佳答案

阅读链接的帖子,您似乎需要:

trait CataDep[T, F[_]]

abstract class Cata[F[_], T](implicit e: CataDep[T, F]) {
def cata[A]: (F[A] => A) => T => A
}

关于scala - Scala 中涉及函数依赖的泛型编程和烂香蕉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com