这个 Haskell 函数的类型签名是什么?

2024-03-26

我写了一个函数来检查一个数字是否是质数:

prime n = prime' n 2 (floor (sqrt n))
     where prime' n c u | n `mod` c == 0 = False
                        | c > u = True
                        | otherwise = prime' n (c+1) u

我无法弄清楚这个函数的类型签名应该是什么。一开始我以为应该是这样的:

prime :: Integral a => a -> Bool

但后来我在编译时遇到错误,因为sqrt期望一个Floating a and floor期望一个RealFrac a而不是Integral a。当我删除类型签名时,它可以编译,但该函数不起作用:

*Euler> :t prime
prime :: (Integral a, RealFrac a, Floating a) => a -> Bool
*Euler> prime 5

<interactive>:1:0:
    Ambiguous type variable `t' in the constraints:
      `Floating t' arising from a use of `prime' at <interactive>:1:0-6
      `RealFrac t' arising from a use of `prime' at <interactive>:1:0-6
      `Integral t' arising from a use of `prime' at <interactive>:1:0-6
    Probable fix: add a type signature that fixes these type variable(s)

我怎样才能让这个功能发挥作用?


问题是你使用sqrt on n,这迫使n为浮点数;你也用mod on n,这强制 n 为整数。直观地看你的代码,n should是一个整数,所以不能直接调用sqrt在上面。相反,你可以使用类似的东西fromIntegral将其从整数转换为另一种数字类型。

prime :: (Integral a) => a -> Bool
prime n = prime' n 2 (floor (sqrt (fromIntegral n)))
     where prime' n c u | n `mod` c == 0 = False
                        | c > u = True
                        | otherwise = prime' n (c+1) u
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个 Haskell 函数的类型签名是什么? 的相关文章

  • 如何使用免费 Monad 的 Church 编码?

    我一直在使用Free数据类型在Control Monad Free来自free包裹 现在我正在尝试将其转换为使用F in Control Monad Free Church但不知道如何映射功能 例如 一个简单的模式匹配函数使用Free看起来
  • 将元组列表转换为列表列表 Haskell

    I have m n p q r s 我怎样才能将它转换为 m n p q r s 谁能帮帮我吗 谢谢 编写一个函数将一对转换为列表 pairToList a a gt a pairToList x y x y 那么你只需要map pair
  • Haskell:为什么将辅助函数命名为“go”?

    I see go在阅读 Haskell 材料或源代码时 我经常会遇到这样的情况 但我从来没有真正感到舒服 我猜它在我的脑海中具有 goto 的负面含义 我开始用 LYAH 学习 Haskell 这就是我开始使用 Haskell 的原因acc
  • 符号 __module_registered 错误的重复定义

    我从 GHCi 收到一条关于 符号 module registered 的重复定义 的错误消息 如下所示 GHCi runtime linker fatal error I found a duplicate definition for
  • Haskell:使用 RankNTypes 折叠记录构造函数

    import Data ConfigFile data Test Test field1 Int field2 Bool field3 String deriving Show whatMyConfigLooksLike field1 5
  • Hive - 通过聚合跨组的值来创建映射列类型

    我有一个看起来像这样的表 customer category room date 1 A aa d1 1 A bb d2 1 B cc d3 1 C aa d1 1 C bb d2 2 A aa d3 2 A bb d4 2 C bb d4
  • 箭头呢?

    阅读有关 Haskell 各种类别主题课程的各种教程 我们发现诸如Monoid Functor Monad等等 所有这些都有数十个实例 但由于某种原因 当我们到达Arrow 只有两个实例 函数和 monad 在这两种情况下 使用Arrow与
  • 使用 stack 安装 shuffle 库时出错

    Using stack 1 2 0 and LTS 7 0我在安装时遇到以下错误shuffle https hackage haskell org package shuffle 图书馆 cabal get shuffle cd shuff
  • 使用 haskell 构建动态库并从 C++ 中使用它

    我想构建一个包含 haskell 函数的动态库 我在 Linux 上工作 想从 C 代码中调用这个动态库 我用的例子是http wiki python org moin PythonVsHaskell http wiki python or
  • 如何在函数式编程中为AST节点生成稳定的id?

    我想将一个特定的 AST 节点替换为另一个节点 并且这个替换的节点是由交互式用户输入指定的 在非函数式编程中 可以使用可变数据结构 并且每个AST节点都有一个对象引用 因此当我需要引用特定节点时 我可以使用这个引用 但在函数式编程中 使用I
  • Show 的新实例声明

    我正在尝试在 Haskell 中为我创建但未成功创建的新数据类型添加实例声明 到目前为止我已经尝试过 data Prediction Prediction Int Int Int showPrediction Prediction gt S
  • “实例显示状态”无法编译

    这是我试图弄清楚的 State Monad 代码 data State a State Int gt a Int instance Monad State where return x State c gt x c State m gt g
  • C# 中的 String 和 string 有什么区别?

    这两者之间有什么区别 我应该使用哪一个 string s Hello world String s Hello world string https learn microsoft com en us dotnet csharp langu
  • 类型衰减——它是什么以及为什么会出现?

    我很惊讶类型衰减在 SO 或其他地方没有得到很好的解释 也许我没有使用正确的术语进行搜索 或者也许我没有正确理解整个事情 我的问题是 它是什么 它是如何 为什么 到达那里的 它的规则是什么 如果你想知道我为什么问 下面是我的哭泣型腐烂故事
  • 具有特定深度的 TypeScript 递归类型

    TypeScript 允许您编写递归类型 但无法深入了解代码在较低级别 即深度 中如何变化 例如 下面的代码在所有级别上都具有相同类型的签名 并且我们必须在每个级别手动检查是否存在sub财产 type Recurse foo string
  • 为什么实现接口的类与 Java 中的接口不属于同一类型?

    I have out load output transactions columnHeaders dataFormat Where load定义为 public boolean load String outputfile List
  • Haskell FFI - 你能从 Haskell 数据结构中获取 C 指针吗?

    我有很多 C 结构体 结构如下 typedef struct unsigned int a unsigned int b StructA 还有很多功能 比如 void doSomethingWith StructA StructB Stru
  • macOS 上的堆栈构建

    我是新来的haskell 我有最简单的程序 usr bin env stack stack resolver lts 13 7 script module Main where import Lib main IO main putStrL
  • 作用域类型变量需要显式 foralls。为什么?

    如果你想使用 GHC词法作用域类型变量 http www haskell org ghc docs 7 6 2 html users guide other type extensions html scoped type variable
  • 如何将 interface{} 转换回其原始结构?

    我需要一种方法将结构 接口动态转换回其原始对象 我可以在里面添加方法 函数 基本上我需要这样的东西 MyStruct gt Interface gt MyStruct 在最终转换时 除了结构内部的内容之外 我对原始结构一无所知 所以我不能这

随机推荐

  • QWidgets可以添加到QWindow中吗?

    现在推荐使用QWindow进行OpenGL绘图 是否可以向此窗口添加小部件 如果是这样 怎么办 如果没有 我应该如何使用 Qt5 将小部件添加到 OpenGL 程序中 应用程序通常会使用QWidget or QQuickView对于它的 U
  • Laravel Auth::user() 关系

    我试图通过 Auth user 函数获取我的用户角色关系 我以前曾这样做过 但由于某种原因它不起作用 Auth user gt role 这将返回尝试从非对象获取属性的错误 在我的用户模型中我有这个 public function role
  • Flask-SQLAlchemy 和 Flask-Restless 不获取孙子

    Problem 我正在 Flask Flask SQLAlchemy 和 Flask Restless 上构建一个应用程序 我使用 Restless 生成了一个用于父子孙关系的 API 我的孩子上的 GET 将正确获取孙子 但父母上的 GE
  • 如何减少部署时的 Docker 映像大小?

    所以我刚刚创建了一个非常基本的 Node 应用程序 我想练习将其放入docker容器中并部署到另一台服务器上 我正在使用这里的步骤 https nodejs org en docs guides nodejs docker webapp h
  • 跳过 FlatFileParseException 或 Spring Batch 中的特定异常

    您好 我需要读取 n 个 平面文件 在文件读取期间 如果从读取器收到 FileParseException 则停止当前文件读取并安全退出并处理下一个文件并继续作业执行 目前我有这个 xml 配置 但我不想这样做 因为我没有真正的跳过限制计数
  • 春云|假装 Hytrix |首次调用超时

    我有一项服务使用了 3 个假客户端 每次启动应用程序时 我都会在第一次调用任何假客户端时收到 TimeoutException 在一切稳定之前 我必须至少触发每个假客户端一次 在网上查了一下 问题是 feign 或 hystrix 内部的某
  • 通过隧道颠覆

    对于工作 我在一个封闭的网络中工作 我们设置了一些只能从我们的网络内部访问的 IP 地址 不过 有一个盒子 我们可以通过 SSH 进入并通过隧道到达我们各自的开发者盒子 我知道我可以通过使用以下方式从我们的开发者盒子获得流量 Lssh 的参
  • 找到 3x3 打孔的所有组合

    我参加了一个嘉年华 在每个地点 他们都会用特殊的打孔器标记您的节目 打孔器是一个 3x3 空间的网格 在每个空间中 要么有一根大头针刺破你的纸 要么没有 这让我想知道你可以用这个工具制作多少种不同的图案 我的第一个想法是 2 9 512 但
  • 在 pypy 中调用 python 文件

    我最近搬到了 PyPy 它的速度快得惊人 但是很多 python 库还没有实现 所以我有很多自制的 python 函数 我想在 PyPy 代码中调用它们 这是我的问题 有没有办法在 PyPy 中调用 python 文件或函数 并向其传递一些
  • 带有 Entity Framework 4 指南的多语言数据库

    我们正在创建一个大型电子商务数据库 需要支持多种语言的数据 例如 产品表将需要名称 描述 元标题 元关键字 元描述等的一项或多项翻译 从关系数据库设计的角度来看 有多种方法可以实现这一点 但 Entity Framework 4 添加了一些
  • 在 Android 中使用拨号盘启动应用程序

    我想通过拨号盘启动我的应用程序 我使用以下代码 用于拨号盘启动应用程序 在广播接收器中 public class HiddenReceiver extends BroadcastReceiver Override public void o
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

    我正在尝试将 hibernate orm 映射工具配置到我的 java 类 并使用 PostgreSQL 作为我的数据库 并将密码配置为 password 当我尝试运行该应用程序时 我在控制台日志中遇到错误 如下所示无法创建请求的服务 or
  • 社交网站的数据库设计

    社交网站 例如 Twitter 中会出现哪些表格 到目前为止我有一个用户表 如何跟踪关注者和我关注的人 我应该为关注者和我关注的人维护一个单独的表吗 这些表中会有哪些列 请不要认为这是主观 偏离主题的 由于我是初学者 我想专家可以指导我获得
  • 如何通过 React JS 博览会正确从 Firebase 实时数据库获取随机节点

    跟进问题来自在控制台中记录变量时出现引用错误 https stackoverflow com questions 75509803 referenceerror when the variable is being logged in co
  • django 表单 - 从 clean() 引发特定字段验证错误

    我对依赖于多个字段的表单进行了验证检查 但最好让验证错误向用户具体显示哪些字段导致了问题 而不仅仅是表单顶部的错误消息 该表单有很多字段 因此可以更清楚地具体显示错误所在 作为解决方法 我尝试在每个相关字段中创建相同的验证clean fie
  • GoldenLayout,如何隐藏/显示组件?

    我有一个基于 GoldenLayout 1 5 9 的应用程序 布局是包含两列的行 请参阅下面我感兴趣的列的配置 let config content type row content type column width 31 conten
  • 用另一条具有相同位置但使用“geom_curve”在“ggplot2”中切割开头和结尾的曲线重叠绘制曲线

    我有一个df带有曲线信息 df lt data frame x c 0 0 1 1 xend c 0 1 1 0 y c 0 1 0 1 yend c 1 0 1 1 curvature c 2 5 1 1 我可以用单独的曲线绘制这些曲线c
  • Laravel Eloquent toArray 不使用方括号

    我正在编写一个 api 并尝试将一些结果转换为 JSON 当雄辩的结果转换为数组时 我期待这样的结果 id 0 id 相反 Laravel 使用表键将其显示为键 值列表 0 id 0 1 id 1 这是函数 results App Even
  • Angular Bootstrap Modal:未知提供者:$modalInstanceProvider

    我正在尝试使用 Angular Bootstrap Modal 指令 http angular ui github io bootstrap http angular ui github io bootstrap 如下 在我的控制器中打开模
  • 这个 Haskell 函数的类型签名是什么?

    我写了一个函数来检查一个数字是否是质数 prime n prime n 2 floor sqrt n where prime n c u n mod c 0 False c gt u True otherwise prime n c 1 u