跨类型构造函数编写通用仿函数实例?

2024-02-26

我正在学习基本类型课程并编写了自己的实现functor适合我的类型Test a(行为就像Maybe):

data Test a = Test a | Emp

class FC c a where
  t :: (a -> b) -> c a -> c b

instance FC Test a where
  t f (Test a) = Test (f a) 
  t f (Emp) = Emp

instance FC Maybe a where
  t f (Just a) = Just (f a) 
  t f (Nothing) = Nothing

是否有可能实现类似的东西:

instance FC c where
  t f (c v) = c (f v)

Error:

Parse error in pattern: c

换句话说,抽象出类型构造函数,替换为c and v,因此创建一个可以应用于具有上下文的任何值的通用实例?


正如你所了解到的,c a不是语法上有效的模式。但将你的问题作为功能提案来阅读:这将如何运作?不是每个Functor有一个单元素构造函数,可以根据您的模式进行映射。一些例子:

data Pair a = Pair a a  -- more than one element
instance Functor Pair where
    fmap f (Pair x y) = Pair (f x) (f y)

data Proxy a = Proxy  -- no elements
instance Functor Proxy where
    fmap f Proxy = Proxy

newtype Cont r a = Cont { runCont :: (a -> r) -> r }  -- element appears in a double-negative position
instance Functor (Cont r) where
    fmap f (Cont g) = Cont (g . (. f))

无论如何,我认为“通用实例”的想法确实没有意义。该实例是您放置特定于类型的代码的位置。 (它必须去某个地方!)

如果你想在写作上少花点力气Functor您可以使用 GHC 的实例DeriveFunctor扩大。

{-# LANGUAGE DeriveFunctor #-}

data Pair a = Pair a a deriving Functor

data Proxy a = Proxy deriving Functor

newtype Cont r a = Cont { runCont :: (a -> r) -> r } deriving Functor
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

跨类型构造函数编写通用仿函数实例? 的相关文章

  • Scala Function.tupled 和 Function.untupled 等效于变量 arity,或者使用元组调用变量 arity 函数

    昨晚我试图围绕接受和调用通用函数做一些事情 即类型在调用站点上已知 但可能因调用站点而异 因此定义应该是跨参数通用的 例如 假设我有一个函数f A B C gt Z 其实这样的还有很多fs 我事先不知道 所以我无法确定类型或数量A B C
  • Haskell scala 互操作性

    我是 Scala 初学者 来自面向对象范式 在了解 Scala 的函数式编程部分时 我被引导到 Haskell 纯函数式编程语言 探索 SO 问题答案 我发现 Java Haskell 具有互操作性 我很想知道 Scala Haskell
  • 纯函数怎么能做IO呢?

    我最近了解到莫纳德随机数 http hackage haskell org package MonadRandom 0 1 13 docs Control Monad Random Class html t 3aMonadRandom图书馆
  • 不同功能的容器?

    我正在尝试为不同的函数实现一个容器类 我可以在其中保存函数指针并稍后用它来调用这些函数 我会尝试更准确地描述我的问题 例如 我有两个不同的测试函数 int func1 int a int b printf func1 works i i n
  • Haskell - 用防护罩替换外壳

    我想知道在这部分代码中是否可以用守卫替换 case 语句 firstFunction String gt Maybe MyType secondFunction MyType gt Integer myFunction String gt
  • Haskell 中的分类结构

    Hask通常被认为是一个范畴 其对象是类型 态射是函数 然而 我看到 Conor McBride pigworker 警告不要使用Hask多次 1 https stackoverflow com a 45905082 474311 2 ht
  • 具有上限的联合类型

    我正在遵循这个问题的公认答案中提出的技术如何定义 类型析取 联合类型 https stackoverflow com questions 3508077 does scala have type disjunction union type
  • 使用 FoldLine 解析多个块

    对于这个简化的问题 我试图解析一个如下所示的输入 foo bar baz quux woo hoo xyzzy glulx into foo bar baz quux woo hoo xyzzy glulx 我尝试过的代码如下 import
  • Haskell 中列表列表的笛卡尔积

    给定一个长度列表的列表x所有子列表的长度都相同y 输出y x长度列表x包含每个子列表中的一项 例子 x 3 y 2 1 2 3 4 5 6 Output 2 3 8不同的输出 1 3 5 1 4 5 1 3 6 1 4 6 2 3 5 2
  • C++ 强制转换运算符重载 [重复]

    这个问题在这里已经有答案了 我有一个只有一个 int 成员的类 例如 class NewInt int data public NewInt int val 0 constructor data val int operator int N
  • 用于遇到 [...] 的 Haskell Parsec 解析器

    我正在尝试使用 Parsec 在 Haskell 中编写一个解析器 目前我有一个可以解析的程序 test x 1 2 3 end 执行此操作的代码如下 testParser do reserved test v lt identifier
  • 为什么这些类型参数不符合类型细化?

    为什么此 Scala 代码无法进行类型检查 trait T type A trait GenFoo A0 S lt T type A A0 trait Foo S lt T extends GenFoo S A S 我不明白为什么 类型参数
  • 找不到模块“Yesod”

    我有以下代码 LANGUAGE TypeFamilies QuasiQuotes MultiParamTypeClasses TemplateHaskell OverloadedStrings module Simple where imp
  • : 中缀运算符在 Haskell 中的作用是什么?

    我正在阅读Haskell 简要介绍 http www haskell org tutorial index html 这不是那么温和 并且它反复使用 操作符而不直接解释它的作用 那么 它到底有什么作用呢 是 前置 运算符 x xs 返回一个
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • 我该如何实现这个折叠功能呢?

    给出了两种数据类型 颜色 和 植物 data Color Red Pink White Blue Purple Green Yellow deriving Show Eq data Plant Leaf Blossom Color Stal
  • 如何将类型设置为 vue slot props Typescript

    我正在尝试在插槽道具上设置类型以在表格组件中进行处理 如图所示 我也一直在尝试 body item UserItem 但这只是重命名参数 body
  • 如何通过“cabal build”或“stack build”构建带有图标的项目

    我想构建一个带有图标的可执行文件 通过谷歌搜索 我发现这里的说明 https wiki haskell org Setting an executable icon 但它只能通过编译源文件来工作ghc 如果我想构建一个具有可执行文件的项目c
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采

随机推荐

  • ActionBar 中操作/菜单项的动态控制

    有没有办法动态禁用 隐藏 添加 删除 ActionBar 中的菜单项 例如 在用户在活动中填写有效的电话号码之前 操作将被禁用 我在 ActionBar API 中没有找到任何有用的方法 唯一的方法似乎是在 ActionBar 中使用自定义
  • 如何使用imagick的writeImage()函数?

    如果我将脚本保存在与正在操作的图像相同的目录中 则此方法有效 并且结果图像 foo jpg 也在同一位置生成 但是 如果脚本位于一个位置 而我希望使用的图像位于另一个位置 而我希望保存缩略图的位置位于其他位置 那么如何指定这些路径呢 做这样
  • 使用 Jekyll 插件在 _site 内生成文件

    我编写了一个 Jekyll 插件 Tags 它生成一个文件并返回该文件的链接字符串 一切都很好 但如果我将该文件直接写入 site 文件夹 它就会被删除 如果我将该文件放在 site 文件夹之外 则它不会在 site 内生成 我应该在哪里以
  • 为什么 KineticJS 文档中没有draw()方法?

    我花了几个小时在谷歌上搜索 Kinetic Layer draw 方法 我发现的只是用例 没有关于如何 何时以及为何使用它的文档 也许它已经被弃用了 这些是我在学习和使用这个精彩框架时使用的主要链接 http kineticjs com d
  • 无法使 Laravel 4 的 Validator 类在框架外工作

    我正在尝试在框架之外使用 Laravel 4 Eloquent 因为 Illuminate Database 包已通过 Composer 独立可用 Eloquent 本身运行良好 但我在尝试实现验证规则时遇到了阻碍 我首先尝试使用一些预构建
  • 如何处理 Cordova 或 Phonegap 上 android 4.0-4.3 和 4.4 之间的宽度不一致?

    我正在 Cordova 3 4 上做一个应用程序 并在使用 Android 4 4 2 的 Moto X 使用 Android 2 3 的 Samsung Galaxy Ace 和模拟器上进行测试 我保留 cli 创建的原始视口 在CSS上
  • jQuery UI 对话框如何禁用后台输入的焦点?

    当您使用 jQuery UI 打开模式对话框时 您会注意到 如果使用 Tab 键 则可以将焦点放在对话框的按钮上 但对话框外部的任何输入都会被忽略 我正在尝试实现同样的行为jQuery UI 工具叠加 http jquerytools or
  • 具有绝对位置的嵌套 Touchable

    我需要实现一个界面 其中一个对象是可单击的 但该对象的一个 区域执行另一个操作 如下所示 gt clicking on this small area does an action gt clicking on this area does
  • 值循环的最小排序

    给定如下序列 1 2 1 2 1 1 1 2 1 2 1 3 1 2 1 2 1 3 什么是高效的获得最小订购量的方法 1 1 1 2 1 2 1 3 1 2 1 2 1 3 1 2 1 2 暴力方法是显而易见的 所以请不要推荐它 除非提供
  • 如何通过 Facebook 的 Graph API 获取共同好友

    有没有办法使用 Facebook 的 Graph API 获取共同好友列表 我一直在玩这个工具 https www simoncross com fb graph GET https graph facebook com 并且还没有想出办法
  • 使用 MVVM 绑定 ComboBox SelectedItem

    我有一个问题选定的项目 in my ComboBox
  • 如何找到对用户控件的所有引用

    在 Visual Studio 2010 中 我有一个非常大的 ASP NET 网站项目 其中有很多用户控件 如何确定整个项目中引用特定 ascx 用户控件的所有 aspx 页面 Thanks 右键单击您的班级User Control并选择
  • 如何在设计时制作支持拖放的自定义WPF ContentControl?

    我想创建内部有一个 子 控件的自定义 WPF 控件 子类化ContentControl or UserControl有效 但有一个缺陷 这些控件在设计器模式下不起作用 我所说的 不起作用 是指这种情况 假设我有一个Canvas里面有我的自定
  • 如何在 iPhone 中保存密码?

    我需要创建一个 iPhone 应用程序 它将与网站通信 所以它需要用户名和密码 现在我需要知道如何在 iphone 中保存用户名和密码 我已经使用过 NSuserdefaults 但这并没有解决我的 pblm 另外我需要恢复视图 从用户退出
  • 使用从情节提要中的通用类继承的类时,出现“界面生成器文件中的未知类”

    我最近重构了我的课程BookTableViewController来自简单的继承UITableViewController 这样它现在继承自泛型类FetchedResultsTableViewController
  • 在 Android 模拟器中以“飞行”模式进行测试

    我正在尝试在手机没有连接到互联网的情况下测试我的应用程序 在我的模拟器中 我在设置中打开了飞行模式 但是 我的应用程序似乎仍然能够与我的服务器通信 它正常工作 在我的设备上 相同的代码在没有数据连接的情况下引发错误 如何确保模拟器中没有互联
  • Route.php找不到我创建的控制器类

    我正在尝试构建一个 silex 应用程序 我的文件结构是 ROOT App Controller IndexController php Config dev php prod php route php vendor web index
  • Canvas 会减小 Jpeg 的图像大小,但为什么呢?

    当我使用以下命令将 JPEG 图像绘制到 Canvas 时drawImage 之后 使用canvas toDataURL 使其可保存在本地 用鼠标右键单击 则保存的 Jpeg Image 的文件大小会减少约 40 仅当使用 Jpeg 时才如
  • 如何处理复合微服务请求中的验证?

    考虑一个具有两个实体的应用程序 User 包含基本用户数据 例如姓名 Passport 包含身份验证凭据 即密码 以及两个内部微服务 UserService 负责创建和管理用户及其基础数据 AuthService 负责用户认证和密码处理 T
  • 跨类型构造函数编写通用仿函数实例?

    我正在学习基本类型课程并编写了自己的实现functor适合我的类型Test a 行为就像Maybe data Test a Test a Emp class FC c a where t a gt b gt c a gt c b insta