- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个函数,用于将纯函数映射到容器或通过它对应用/单子(monad)操作进行排序。对于纯映射,我们有
fmap :: Functor f => (a -> b) -> (f a -> f b)
对于单子(monad)测序,我们有(来自 Data.Taversable)
mapM :: (Traversable f, Monad m) => (a -> m b) -> (f a -> m (f b))
类似于
mapKleisli :: (Traversable f, Monad m) => Kleisli m a b -> Kleisli m (f a) (f b)
mapKleisli = Kleisli . mapM . runKleisli
我们知道 (->) 和 (Kleisli m) 都是类别(和箭头)。所以很自然地做一个概括:
mapCategory :: (X f, Category c) => c a b -> c (f a) (f b)
你知道这样一个具有类似方法的类X吗?也许,在黑客攻击的某个地方?我尝试 hoogle/hayoo 但没有找到合适的东西。
更新:
现在我更清楚自己需要什么了。 Kleisli 箭头和 (->) 都是 ArrowApply 的实例,它与 Monad 一样强大。我想出了这个基于箭头的 Travesable 版本:
{-# LANGUAGE TypeOperators #-}
import Prelude hiding (id, (.), mapM)
import Control.Arrow
import Control.Category
class Traversable f where
traverse :: ArrowApply (~>) => f a -> (a ~> b) ~> f b
mapArrow :: (ArrowApply (~>), Traversable f) => a ~> b -> f a ~> f b
mapArrow a = arr (\x -> (traverse x, a)) >>> app
instance Traversable Maybe where
traverse Nothing = arr (const Nothing)
traverse (Just x) = arr (\a -> (a, x)) >>> app >>> arr Just
instance Traversable [] where
traverse [] = arr (const [])
traverse (x : xs) = undefined -- this is hard!
我可以使用通常的基于应用程序的 Traversable,并使用 Identity 来实现纯函数,但我不确定它是否好。将纯函数视为一元操作的特例是很奇怪的。将纯函数和一元操作解释为某个操作类(Category/Arrow/ArrowApply)的实例对我来说看起来更简单。
问题:您想完成 []
的实例吗?我对 ArrowApply 与 Monad 的看法有任何意义吗?
最佳答案
您要求“某个 X 类”,但应该很清楚,该类最(或者可能是唯一)正确的名称是“Functor”。您想要的只是为任意 Category
实例定义的仿函数类,而不是仅限于 (->)
。
当然,您的定义仍然限于从类别到由提供实例的类型构造函数定义的子类别的(内)仿函数。如果您进一步概括一下,这两个类别没有理由相同,即 a type class something like this one :
class (Category r, Category t) => Functor f r t | f r -> t, f t -> r where
fmap :: r a b -> t (f a) (f b)
与范畴论中仿函数的完整概念相比,这仍然非常有限,但是哦,好吧。
有趣的是,它仍然有一个 (->)
类型构造函数 - 这是因为,即使我们使用任意实例对源类别和目标类别进行建模,整个事物(特别是仿函数本身)在某种意义上仍然存在于 Hask 中,即与 (->)
关联的类别。仿函数的另一半(映射对象的部分)粗略地说,是类型构造函数 的
.* -> *
类型中的 (->)
f
关于haskell - 仿函数是 for (a -> b) -> (f a -> f b),什么是 for (Category c) => c a b -> c (f a) (f b)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6445501/
我正在尝试根据 magento 中的产品 ID 在类别路径中获取类别名称。 假设我的产品 ID = 1,并且我在其中定义了 category5 (id = 5),并且我得到了类似 2/3/5 的类别路
我试图弄清楚如何通过 AngularJS 中的 $http.get() 方法发送数组。这就是我正在做的事情: $http.get('/events.json', {params: {category_
我在产品类别和子类别网站上工作,可以创建的子类别数量是无限的,这意味着我们可以自己拥有子类别的子类别。一切正常,我只是有一个问题:假设“PRODUCT 1”属于“SUB SUB CATEGORY 1”
在 stackoverflow 上所有这些 mod 重写主题之后,我仍然没有找到我的问题的答案。我有一个顶级站点,基本上我想做的就是将 /index.php?method=in&cat=Half+Li
我正在为我的未婚夫构建一个 Rails 应用程序来进行一些非常基本的库存跟踪。我们已经经历了几种选择,因为无论如何我都想学习 Rails,所以我们想出了为什么不。无论如何,如果我可以将一些产品按这样分
我需要在 Prestashop 主题的类别页面中列出同级类别。目前它确实显示子类别(如果有)但不兄弟类别。 如果能快速回答,我们将不胜感激!谢谢。 最佳答案 首先我会在/override/contro
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 7 年前。 Improve
我正在使用以下维基媒体 API 列出具有特定类别的所有页面:https://www.mediawiki.org/wiki/API:Categorymembers 例如https://en.wikipe
我应该如何命名用户类别和文章类别的表和模型?我有两个表,一个是用户,另一个是文章。我想对它们进行分类,以便我可以仅调用新闻文章或仅使用公司类别中的用户。所以我需要这些模型/表之间的关系。 我考虑过为文
在 UI Router 中实现此类功能的最佳方法是什么? /category/product /category/category/product 例如: /telephones/apple/ipho
我有以下 SQL 架构: tbl_产品: - ID - id_category tbl_categories: - ID - id_parent tbl_products_categories:- i
我需要创建一个对用户隐藏的应用程序。但在它被隐藏之前,我需要在 GUI 上设置一些配置,然后我必须从应用程序列表中隐藏图标。如果我删除 应用程序未显示在应用程序列表中。但是我的配置 GUI 也没有显
我正在尝试派生一个 MySQL 查询来转换这个: product | sold milk | 6 milk | 4 bread | 3 bread | 2 bread
我正在使用 ^category/|categories/$。 为什么 ^categor[y|ies]/$ 不起作用? 最佳答案 你的正则表达式应该是, ^categor(?:y|ies)/$ 使用非捕
据我所知,有两种情况会导致以下错误: ld: warning: instance method 'resetAudioSystem' in category from /opentok-ios-sdk
我希望我的问题很清楚,但我会尝试再解释一下。 在我的数据库中,我有两列名为“category”和“images”。在我的表单中,人们需要添加一个类别,以便我的 PHP 向 MySQL 添加一个新条目。
我在 pandas 中有以下 df 数据框: weekday venta_total_cy 0 Viernes 5.430211e+09 1 Lunes 3.4255
我目前陷入困境。场景是这样的。我有可能与多个类别相关联的产品。数据结构如下图: Products Table: product_id name 1 Lemon 2
我使用 openActivity()使用 Kotlin 在 Android Studio 3.1.2 中创建首选项 UI。 看来代码A和代码B都可以正常工作。 android.intent.categ
我有一个 Postgres 数据库。我正在尝试根据表 2 中表达的条件删除表 1 中的行。 表 1:id, object_id, time, action_type 表 2:object_id, ob
我是一名优秀的程序员,十分优秀!