为什么在此表达式中用括号替换美元符号 ($) 会导致错误? [复制]

2023-12-20

我有这两种表达方式:

  1. foldr (-) 0 . map (uncurry (*)) $ coords 5 7

  2. foldr (-) 0 . map (uncurry (*)) (coords 5 7)

(1) 工作打印出结果,但 (2) 有错误说:

<interactive>:50:15:
    Couldn't match expected type ‘a -> t0 c’
                with actual type ‘[Integer]’
    Relevant bindings include
      it :: a -> c (bound at <interactive>:50:1)
    Possible cause: ‘map’ is applied to too many arguments
    In the second argument of ‘(.)’, namely
      ‘map (uncurry (*)) (coords 5 7)’
    In the expression: foldr (-) 0 . map (uncurry (*)) (coords 5 7)

谁能告诉我这两者有什么区别?谢谢。


有一个更简单的例子:

Prelude> id . id $ "Example"
"Example"
Prelude> id . id ("Example")
<interactive>:2:10:
    Couldn't match expected type ‘a -> c’ with actual type ‘[Char]’
    Relevant bindings include it :: a -> c (bound at <interactive>:2:1)
    In the first argument of ‘id’, namely ‘("Example")’
    In the second argument of ‘(.)’, namely ‘id ("Example")’
    In the expression: id . id ("Example")

问题是函数应用程序的绑定比(.)。固定水平为($)解决这个问题:

id . id $ "Example" = (id . id) $ "Example"
                    = (id . id) "Example"

然而,随着(...),函数应用程序获胜,您最终使用(.)以非函数作为第二个参数:

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

为什么在此表达式中用括号替换美元符号 ($) 会导致错误? [复制] 的相关文章

  • Haskell 中多核编程的现状如何?

    Haskell 中多核编程的现状如何 现在有哪些项目 工具和库可用 有哪些经验报道 2009年至2012年期间 发生了以下事件 2012 从 2012 年开始 并行 Haskell 状态更新开始出现在并行 Haskell 摘要 http w
  • 使用 Haskell 绘制图表

    是否可以使用 Haskell 绘制一个简单的图表 你们中的任何人都可以告诉我该怎么做吗 该图应至少包含 3 个点 Haskell 图表 https github com timbod7 haskell chart似乎不错 The wiki
  • 并行 Haskell - GHC GC 火花

    我有一个正在尝试并行化的程序 带有可运行代码的完整粘贴here http lpaste net 101528 我进行了分析 发现大部分时间都花在findNearest这本质上是一个简单的foldr超过一个大Data Map findNear
  • 优化 Haskell 内循环

    仍在 Haskell 中进行 SHA1 实现 我现在已经有了一个有效的实现 这是内部循环 iterateBlock Int gt Word32 gt Word32 gt Word32 gt Word32 gt Word32 gt Word3
  • 来自数据类型的 Haskell 随机数

    我对 Haskell 还很陌生 我有一个数据类型 data Sentence Prop Int No Sentence And Sentence Or Sentence deriving Eq 我已经为它写了一个 Show 实例 然而 无论
  • 为什么 GHC 在这里推断出单态类型,即使禁用了单态限制?

    这是由解析 f f pure 的类型 https stackoverflow com questions 55388119 resolving the type of f f pure 55388309 noredirect 1 comme
  • Haskell/Idris 中的开放类型级别证明

    在 Idris Haskell 中 可以通过注释类型并使用 GADT 构造函数 例如使用 Vect 来证明数据的属性 但这需要将属性硬编码到类型中 例如 Vect 必须是与 List 不同的类型 是否有可能拥有具有开放属性集的类型 例如同时
  • 为什么对本地列表求和比用“GHC -O2”对教会编码列表求和慢?

    为了测试教会编码的列表如何针对用户定义的列表和本机列表执行 我准备了 3 个基准测试 用户定义的列表 data List a Cons a List a Nil deriving Show lenumTil n go n Nil where
  • 过滤路径列表以仅包含文件

    如果我有一个清单FilePaths 如何过滤它们以仅返回常规文件 即不是符号链接或目录 例如 使用getDirectoryContents main do contents lt getDirectoryContents foo bar l
  • 不理解 Monoid 定义中态射的表示法

    我试图理解什么Monoid是从范畴论的角度来看的 但我对用来描述它的符号有点困惑 这是维基百科 在范畴论中 幺半群范畴 C I 中的幺半群 或幺半群对象 M 是一个对象 M 和两个态射 M M M 称为乘法 I M 称为单位 我的困惑在于态
  • 浏览前奏的源代码会带来奇怪的情况

    我一直在寻找的定义seq并遇到了这个奇怪的事情 为什么所有这些函数都有相同 相似的定义 seq a gt b gt b seq let x x in x inline a gt a inline let x x in x lazy a gt
  • parList 和 parBuffer 如何选择?

    我从 haskell 并行开始 我已经成功学习了如何使用一些策略 例如 r0 rseq rdeepseq parList parMap 现在我正在进一步寻求更高的效率 所以这是我的问题 有什么区别parList and parBuffer
  • 如何获得具有超载字段名称的经典镜头?

    我正在尝试为具有相同字段名称的记录构建镜头 除此之外 我试图 包装 扩展 这些基本记录 并希望相同的字段名称适用于包装 扩展的记录 我相信 优雅的镜头就是这样做的 我如何让以下内容发挥作用 Data types for context of
  • kind 类型的函子和应用词 (* -> *) -> *

    我遇到了一种情况 我的代码将受益于使用Functor and Applicative 类似抽象 但针对种类类型 gt gt 定义一个更高种类的函子可以通过RankNTypes像这样 class HFunctor f where hfmap
  • 一个目录中的多个 Haskell cabal-packages

    在一个目录中包含多个 cabal 软件包的推荐方法是什么 Why 我有一个包含许多可分离模块的旧项目 由于最初它们只形成一个程序 因此将它们放在同一目录中以便于编译非常方便 而且现在仍然如此 Options 只是忍受并将所有内容 包括保存内
  • 为自定义镜头编写类别实例

    我一直在读这个article http www haskellforall com 2012 01 haskell for mainstream programmers 28 html用于理解镜头 我知道这不同于 爱德华 克内特 Edwar
  • Haskell 中的参数数量和无点 [重复]

    这个问题在这里已经有答案了 对于多重模式匹配 不同数量的参数是不可能的 即使是无点的 foo True b b 2 foo id 例如 不起作用 但 foo True 2 foo id 做 有时我们只能在函数的一部分使用 point fre
  • 如何在递归方案中派生实例

    我正在测试其中的一些想法本文 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 这里使用什么算法来执行模式匹配 我看到两
  • 在 win32/cygwin 上编译 haskell 模块网络

    我正在尝试编译 Network HTTP http hackage haskell org package network http hackage haskell org package network 在 win32 cygwin 上

随机推荐