广义新类型推导

2024-01-05

Haskell 可以推导出以下实例MonadState s in T1低于但不在T2然而,这是一个非常相似的类型。我应该以什么方式修改代码T2这样的实例MonadState s可以自动导出吗?

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

import Control.Monad.Reader
import Control.Monad.State

newtype T1 r s a = 
  T1 { runT1 :: ReaderT r (State s) a }
  deriving (Monad, MonadReader r, MonadState s)

newtype T2 r s a = 
  T2 { runT2 :: StateT r (State s) a }
  deriving (Monad, MonadState r, MonadState s)

你不能让一个类型有两个实例MonadState。这是因为MonadState定义为

class Monad m => MonadState s m | m -> s where
    get :: m s
    set :: s -> m ()
    state :: (s -> (a, s)) -> m a

关键部分是| m -> s。这需要扩展FunctionalDependencies,并指出对于任何m,我们自动知道关联的s。这意味着对于任何给定的m, 只能有one选择s这是有效的。所以你不能让它同时适用MonadState r m and MonadState s m unless r ~ s. If r ~ s,那么编译器如何知道它适用于哪个底层 monad?在这种情况下,我认为您还会发现,如果您创建,那么理解和使用代码会容易得多get and put带有后缀来指示哪个函数,例如getInner, setInner and getOuter, setOuter.

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

广义新类型推导 的相关文章

  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 使用默认值压缩而不是删除值?

    我正在 haskell 中寻找一个函数来压缩两个长度可能不同的列表 我能找到的所有 zip 函数都只是删除列表中比其他列表长的所有值 例如 在我的练习中 我有两个示例列表 如果第一个比第二个短 我必须用 0 填充 否则我必须使用 1 我不允
  • Haskell Cabal:“包间接依赖于同一包的多个版本”

    清除我的所有后cabal installed 包 我运行了以下会话 cabal update Downloading the latest package list from hackage haskell org james bast c
  • 函数式语言与语言实现的角度有何不同

    出现了全新的 函数式编程 范式 与过程式编程相比 它需要彻底改变思维模式 它使用高阶函数 纯度 单子等 我们通常在命令式和面向对象语言中不会看到这些 我的问题是如何执行这些语言与命令式或面向对象语言的不同之处在于 例如内存管理或指针等内部结
  • 当约束成立时,将没有约束的 GADT 转换为另一个有约束的 GADT

    我们能否将构造函数没有给定约束的 GADT 转换为具有上述约束的 GADT 我想这样做是因为我想要深度嵌入箭头并用 目前 似乎需要的表示做一些有趣的事情Typeable 一个理由 https stackoverflow com a 1223
  • 为什么对本地列表求和比用“GHC -O2”对教会编码列表求和慢?

    为了测试教会编码的列表如何针对用户定义的列表和本机列表执行 我准备了 3 个基准测试 用户定义的列表 data List a Cons a List a Nil deriving Show lenumTil n go n Nil where
  • 告诉阴谋集团主模块在哪里

    我有一个具有以下结构的项目 foo cabal src Foo Main hs foo cabal 的一部分如下所示 executable foo main is Foo Main hs hs source dirs src Main hs
  • 如何给Servant中的所有端点添加前缀?

    我在 Haskell 仆人中有一个 hello world 应用程序 这是其中的一部分 type API my items gt Get JSON MyItem lt gt my items gt Capture id Int gt Get
  • Pandoc“无法找到已安装模块的模块...”

    我目前正在尝试使用 pandoc 作为 Haskell 模块 而不是程序 将 MediaWiki 文本转换为其他格式 我们假设这个程序 import Text Pandoc Readers MediaWiki main do print f
  • 双共体的方法是什么?

    在思考建议哪些更有用的标准课程时到这个 https stackoverflow com a 40833245 745903 class Coordinate c where createCoordinate x gt y gt c x y
  • Haskell:去掉 liftM2 中的括号

    如何去掉标有的括号 而不引入新名称 如果能分成多行就更好了 liftM2 somefunc arg1 get arg2 somefunc arg3 get arg3 您可以使用以下方法删除最后一个 但另一个显然不能在不引入新名称的情况下被删
  • 具有运行时错误的 Foldl 实现

    向你学习 Haskell http learnyouahaskell com higher order functions folds解释foldl1 Foldl1 和 Foldr1 函数的工作方式与 Foldl 和 Foldr 非常相似
  • 一个目录中的多个 Haskell cabal-packages

    在一个目录中包含多个 cabal 软件包的推荐方法是什么 Why 我有一个包含许多可分离模块的旧项目 由于最初它们只形成一个程序 因此将它们放在同一目录中以便于编译非常方便 而且现在仍然如此 Options 只是忍受并将所有内容 包括保存内
  • 运行程序的最佳 Haskell 库是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如果我要将一个程序投入生产 我需要该程序做几件事才能将其视为 可操作 也就是说 工程师和操作人员以可测量
  • 为自定义镜头编写类别实例

    我一直在读这个article http www haskellforall com 2012 01 haskell for mainstream programmers 28 html用于理解镜头 我知道这不同于 爱德华 克内特 Edwar
  • 如何在递归方案中派生实例

    我正在测试其中的一些想法本文 http blog sumtypeofway com an introduction to recursion schemes 我想派生 Term 类型的 Eq 实例 LANGUAGE DeriveFuncto
  • Haskell GHC:具有 N 个构造函数的模式匹配的时间复杂度是多少?

    假设我们有以下 Haskell data T T0 T1 T2 TN toInt T gt Int toInt t case t of T0 gt 0 T1 gt 1 T2 gt 2 TN gt N 这里使用什么算法来执行模式匹配 我看到两
  • 仪器化状态单子

    我正在努力给予Monad and MonadState的实例State 计算的数量 gt gt return get and put运营 data Counts Counts binds Int returns Int gets Int p
  • 我是否应该使用 GHC Haskell 扩展?

    当我学习 Haskell 时 我发现有很多语言扩展 http haskell org ghc docs latest html users guide ghc language features html在现实生活中使用的代码 作为初学者
  • 为什么这会导致 Haskell Conduit 库内存泄漏?

    我有一个conduit https hackage haskell org package conduit管道处理长文件 我想每 1000 条记录为用户打印一份进度报告 所以我这样写 Every n records perform the

随机推荐

  • Magento - 拉出一条客户评论

    我一直在尝试将一条客户评论拉到产品页面上 我没有代码可以显示 老实说我不知道 从哪里开始 并且在网上找不到任何提及它的信息 有人有主意吗 我之前写了一个教程 将所有评论元素带到产品页面上 因此您可以按照本教程进行操作 http www e
  • 创建 Django 模型或更新(如果存在)

    我想创建一个模型对象 例如 Person 如果 person 的 id 不存在 否则我将获得该 person 对象 创建新人的代码如下 class Person models Model identifier models CharFiel
  • 如何将控制台指定为要使用 ostream 写入的文件?

    cout是一个对象ostream class 另外 当我们写 filebuf objFileBuf objFileBuf open test txt ios out ostream objOstream objFileBuf objOstr
  • 如何读懂“交替”行?

    我有一个文本文件 其中包含遵循替代模式的行 例如 name SomeName counterA 0 counterB 0 counterC 0 name SomeNameB counterA 1 counterB 2 counterC 3
  • Android 中的 3D 轮播

    我正在为 Android 开发 3D Carousel 我正在用这个code http www codeproject com Articles 146145 Android 3D Carousel以下是我当前的输出 我想开发以下3D形状的
  • Word 打开 XML 邮件合并

    我正在尝试使用 Word 的 XML 来自 Word 2007 手动创建邮件合并 我有以下无效的 XML
  • 水晶报表“文件名无效。”问题

    我已经上传了我的 WebApplication 我的应用程序是在 VS2008 中使用 Crystal Reports 2008 sp3 我已经上传到并行丛服务器上 我已将水晶报表所需的所有 Dll 添加到 Bin 文件夹中 我的报告路径也
  • 错误:无法在服务器上启动调试

    我使用 Visual Studio 2010 mvc3 设计和开发了我的网站 我已从服务器复制了我的项目 编辑数据库服务器名称后 我尝试运行我的项目 但它显示错误 无法在服务器上启动调试 调试器无法连接到远程计算机 这可能是因为远程计算机未
  • Nativescript + iOS webview + 本地文件

    我目前正在开发一个简单的应用程序 该应用程序有一个使用网络视图的 HTML 部分 内容位于 app www 文件夹中 我从 home ts 组件访问它们 在 HTML 中使用类似的内容
  • Rails 4 HABTM 关联的自定义验证

    我有一个简单的场景 但我似乎找不到任何适用于 Rails 4 的建议解决方案 我只想添加一个自定义验证器来检查我的 HABTM 关联之间存储的关联数量 令我惊讶的是 说起来容易做起来容易吗 我已经寻找了一个解决方案 但最终似乎只找到了旧版本
  • 在 GitHub 的 Atom 编辑器中安装 Kite 插件

    我想试一试Kite https www kite com 这是人工智能的概念 帮助开发人员提供有关他或她当前正在编写的有用函数或表达式的提示 我已经下载了风筝原子插件 https github com kiteco plugins来自 Gi
  • php 使用 preg_match 验证字符串

    我试图在 PHP 中使用 preg match 验证输入字符串仅包含 a z A Z 0 9 字符 如果它只包含这些 则进行验证 我尝试在谷歌上搜索 但找不到任何有用的东西 有人可以帮忙吗 谢谢 使用模式 A Za z0 9 如果空字符串也
  • Ember.js ember-data resadapter 无法加载 json

    干杯 我有余烬数据存储 TravelClient Store DS Store extend revision 11 adapter DS RESTAdapter create bulkCommit false url http someI
  • 如何删除今天创建的所有记录?

    我正在处理一个非常大的数据库 600 万条记录 我今天添加了约 30 000 条不良记录 如何删除MySQL中今天创建的所有记录 它似乎created at是一个日期时间 尝试 delete from table where date cr
  • vs2015 更新 3 时 npm 安装失败并出现错误 C2373

    使用 Windows 10 重新安装我的机器后 进行设置Visual Studio 2015我在安装 git 存储库时遇到此错误 npm install在不同的项目上失败了 C Program Files nodejs node modul
  • Fortran 数组中的变量被删除?

    我有下面的代码 具有抽象类型 继承类型和一个短程序 我在其中创建一个对象并将其存储在数组中 module m implicit none type container class a allocatable item end type co
  • jQuery:禁用除当前复选框之外的所有复选框

    我有一些复选框需要以与单选按钮控件类似的方式运行 本质上 当选中一项时 所有其他项都需要取消选中 我怎样才能以尽可能少的痛苦来实现这一目标 所以总结一下 如果选中某个复选框 则必须取消选中所有其他 同级 保持单击的一个复选框不变 我已经知道
  • javascript postMessage 不工作

    我不知道该怎么办 我尝试了来自不同来源的几个示例代码 我在不同的浏览器中尝试了它们 从 Chrome 9 到 FF 4 但似乎仍然没有任何内容可以与 postMessage 功能一起使用 JS 控制台没有给我任何信息 没有一个错误 仍然没有
  • PowerShell 和 ActiveDirectory 模块 - 查找不属于特定组的用户

    上周 我第一次接触到 PowerShell 和 Active Directory 我希望能够找到非管理员与域管理员的用户列表 到目前为止 我知道如何使用以下命令 语句获取所有 ActiveDirectory 用户的所有属性 Get ADUs
  • 广义新类型推导

    Haskell 可以推导出以下实例MonadState s in T1低于但不在T2然而 这是一个非常相似的类型 我应该以什么方式修改代码T2这样的实例MonadState s可以自动导出吗 LANGUAGE GeneralizedNewt