Haskell主要函数

2023-12-21

module Main where

qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger
                 where
                   smaller = [a | a <- xs , a <= x]
                   larger  = [a | a <- xs , a >  x]

main = do qsort [1,3,2]

我收到以下错误

Couldn't match expected type `IO t0' with actual type `[a0]'         
In the expression: main
When checking the type of the function `main'

我究竟做错了什么?


一个内的所有函数do块必须与返回的一元值匹配。你可以写

main = do
    print (qsort [1, 3, 2])

Because print返回一个IO价值。同样,如果您使用的是Maybemonad,你必须做类似的事情

-- lookup :: Eq k => k -> [(k, v)] -> Maybe v
-- listToMaybe :: [a] -> Maybe a

firstElementOf :: Eq q => k -> [(k, [v])] -> Maybe v
firstElementOf key assocMap = do
    v <- lookup key assocMap
    first <- listToMaybe v
    return first

这有效是因为lookup and listToMaybe两者都返回一个Maybe,这是整体的返回值do由类型签名指定的块firstElementOf.

看看类型qsort,它只返回[a], not IO something,所以不能直接在里面使用main的阻止。您还可以使用以下命令将其返回值分配给名称let:

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

Haskell主要函数 的相关文章

  • Haskell 重叠/不连贯的实例

    我知道这段代码有点傻 但有人可以解释为什么吗isList 42 回报True然而isList2 42 prints False 以及如何防止这种情况发生 我想更好地理解一些更晦涩的 GHC 类型扩展 我认为这将是一个有趣的例子 LANGUA
  • 使用 haskell 构建动态库并从 C++ 中使用它

    我想构建一个包含 haskell 函数的动态库 我在 Linux 上工作 想从 C 代码中调用这个动态库 我用的例子是http wiki python org moin PythonVsHaskell http wiki python or
  • 在 Haskell 中的列表末尾添加一个元素

    我是 Haskell 的初学者 我正在尝试在列表末尾添加一个元素 我输入一个像 1 2 3 4 这样的列表和一个数字 10 我想要一个像这样的输出 1 2 3 4 10 My code func a a func a x xs x func
  • 为什么Data.Hashmap中没有mapKeys?

    我想使用诸如mapKeys to map仅限按键 即有一个功能mapKeys in Data Map 但没有类似物Data Hashmap 此外 在Data Hashmap我没有发现任何有关操作按键的信息 是否只有不完整之处Data Has
  • “实例显示状态”无法编译

    这是我试图弄清楚的 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
  • 不同种类的ReaderT?

    冒着成为一个XY问题 https en wikipedia org wiki XY problem 是否有可能有一个ReaderT与不同的环境 我正在尝试类似 type AppM perms ReaderT perms IO 但是编译器抱怨
  • 用户状态(秒差距)

    我正在使用秒差距解析一个表达式 并且我想使用秒差距中的用户状态来跟踪这些表达式中的变量 不幸的是我真的不知道该怎么做 给出以下代码 import Data Set as Set inp x y z data Var V String var
  • 主函数抱怨返回非 IO monad

    import Debug Trace main do trace Main function parses and returns 0 return 这会引发错误 app hs 3 1 Couldn t match expected typ
  • 哪个 Haskell 计算机图形几何库?

    我想用 Haskell 做一些计算机图形学实验 这将包括进行一些几何计算并最终编写光线追踪器 我应该选择哪个库来轻松处理向量 矩阵及其相关操作 Hackage 上很少有包括像这样好看的vect http hackage haskell or
  • 按广度优先顺序列出目录所有内容导致效率低下

    我编写了一个 Haskell 模块来按广度优先顺序列出目录的所有内容 下面是源代码 module DirElements dirElem where import System Directory getDirectoryContents
  • 为什么 Haskell 类型签名声明有多个箭头?

    抱歉 这句话措辞不好 但很难描述 我想我会跳到这个例子 add Integer gt Integer gt Integer add x y x y 为什么 Integer gt Integer gt Integer 代替 Integer I
  • 有没有办法从 IO monad 中解开类型?

    我有这个非常简单的功能 import qualified Data ByteString Lazy as B getJson IO B ByteString getJson B readFile jsonFile readJFile IO
  • 在 Haskell/Yampa 和 HOOD 中调试游戏对象的输出

    我一直坚持使用 Haskell Yampa Arrows with HOOD 为我的游戏对象生成调试输出 我的引擎基本上运行一系列游戏对象 这些对象产生输出状态 线 圆 然后进行渲染 data Output Circle Position2
  • 有可能吗?:行为 t [行为 t a] -> 行为 t [a]

    有没有办法有一个Behavior t a 其中 a 在时间 t 的值是 a 中包含的值Behavior t Behavior t a 在时间 t 即 具有以下类型的函数 Behavior t Behavior t a gt Behavior
  • 在 Windows 上使用堆栈安装 SDL2 for Haskell

    我正在尝试将 SDL2 与堆栈一起使用 我跟着这些说明 https www reddit com r haskellgamedev comments 4jpthu windows sdl2 is now almost painless vi
  • Haskell/GHC:使用相同模式匹配多个一元构造函数

    所以我正在尝试定义 TrieSet 数据类型 尽管我知道我不需要 http hackage haskell org package TrieMap module Temp where import Data Map data TrieSet
  • 在 Haskell 中将字节转换为 Int64s/Floats/Doubles

    我正在尝试解析 Haskell 中的二进制文件格式 Apple 的二进制属性列表格式 该格式所需的内容之一是将字节序列视为 a 无符号 1 2 或 4 字节整数 b 有符号 8 字节整数 c 32 位floats d 64 位doubles
  • Haskell 中美元符号 ($) 和 id 函数之间有关系吗?

    这几天我正在读一篇评论莫纳德挑战 http mightybyte github io monad challenges 我强烈推荐给像我这样的 Haskell 初学者 我最终得到了这个线程 https news ycombinator co
  • 通过 Emacs 评估 ghci 或 Hugs 中的缓冲区

    在 Emacs 中使用 sml mode 我已经能够使用以下命令将缓冲区内容直接发送到较差的 SML 进程C c C b 现在我只想用 Haskell 做同样的事情 Haskell 模式似乎不支持这一点 所以我想知道 使用 Emacs 和
  • 如何在 Yesod 中使用 CSS 框架?

    我想将 Blueprint CSS 框架与 Yesod 一起使用 有没有最佳实践 因为 Yesod 使用 CSS 模板 所以在我看来我不能直接使用 css 文件 我必须将它们重命名为 lucius files 吗 如何将 CSS 添加到 d

随机推荐

  • 当 facebook 应用程序未安装问题时,在 android 中使用 facebook sdk 登录

    我已经在 Android 应用程序中实现了通过 facebook 登录 当我的设备上安装了 facebook 应用程序时 它工作正常 卸载应用程序后 当通过 facebook 登录时 它显示 facebook 登录屏幕 授予应用程序权限后
  • 在 MSSQL 中处理加密数据的最佳实践

    我的用户数据库中有一些数据 我希望对其进行加密 大多数数据都需要在请求时解密 但也有一些密码可以保持加密状态 过去我们会使用密码比较但我相信这现在已经过时了 我已按照步骤操作here http www kodyaz com articles
  • 为什么 Node.js 无法提供 .woff 文件

    我下载了 woff由于中国的某些网络原因 来自 Google 网络字体的文件 之前我尝试过 font face那个在Github 页面 http jiyinyiyong github com she bin 它有效 但这一次我花了一个小时才
  • 更新 Autofac 后出现奇怪的异常

    我之前有一个MVC4应用程序 我已经更新了 Autofac 的版本 一切正常 现在我遇到了这个奇怪的异常 请帮忙 Method not found Autofac Builder IRegistrationBuilder 3 Autofac
  • C++ lambda 表达式 - 编译器如何解释它们?

    我刚刚开始学习 C 11 中的新功能 我正在阅读 C Primer Stanley Lippman 中有关 lambda 的内容 并正在尝试使用它们 我尝试了以下代码 auto func gt int int c 0 return gt i
  • Null FragmentTransaction 被传递给 TabListener.onTabSelected()

    我使用此处提供的示例代码将导航选项卡添加到操作栏 http developer android com guide topics ui actionbar html http developer android com guide topi
  • 如何为异步等待调用创建包装器?

    据我所知 没有内置 或框架扩展 支持ConnectAsync AcceptAsync SendAsync ReceiveAsync等等 我将如何编写自己的包装器 该包装器将受到异步等待机制的支持 例如 我当前的代码处理ReceiveAsyn
  • Java 用 '(撇号/单引号)和 \(反斜杠)一起替换问题

    我好像遇到问题了我有一个查询字符串 其中的值可以包含单引号 这将破坏查询字符串 所以我试图做一个替换来改变 to 这是示例代码 This is it replace 其输出仍然是 This is it 它认为我只是在为引用做一个转义字符 所
  • 未能找到目标 Vuzix Corporation:Vuzix M300 SDK:23

    我正在尝试为 Vuzix M300 智能眼镜开发应用程序 我已经通过 Android SDK Manager 安装了 Vuzix SDK 我已遵循 Vuzix 文档中提到的所有步骤 我还将编译 SDK 版本设置为 Vuzix M300 SD
  • 你调用的对象是空的

    当我在 NUnit 中运行这个程序时 出现错误 你调用的对象是空的 虽然这不是原始程序 但我也遇到了类似的错误 任何帮助表示赞赏 异常发生于 driver Navigate GoToUrl http www yahoo com 程序 usi
  • 逐行将 .txt 读取到批处理变量中

    我有一个批处理脚本 可以将 ping 发送到某些 PC 可用的 PC 被写入文本文件中 因此每台 PC 都站在自己的行中 另一个批处理脚本将一些文件复制到 PC 目前它尝试复制到所有 PC 现在我想修改脚本 以便批处理读出文本文件并仅复制到
  • 图结构中拥有的指针

    在 Rust 社区的慷慨帮助下 我成功地获得了使用托管指针组装的拓扑数据结构的基础 这一切结合得相当好 总的来说我对 Rust 非常兴奋 然后我读了这个post http pcwalton github io blog 2013 06 02
  • reflog 过期并 gc prune 后推送到原点

    我使用以下命令删除了本地存储库中的一些无法访问和悬空的提交 git fsck unreachable dangling no reflogs git reflog expire expire now all git gc prune now
  • 如何使用react js在Fetch API中设置超时

    我在 React js 中使用 fetch post 方法 当向后端发送请求时 需要 7 分钟才能提供响应 然后前端会自动超时 你能帮我解决一下如何在 fetch 方法中设置 10 分钟的时间 让前端等待响应 并且只有当后端花费超过 10
  • 前缀/后缀增量运算符

    我想确保我正确理解按值传递与按引用传递 特别是 我正在查看增量的前缀 后缀版本 对象的运算符 假设我们有以下课程X class X private int i public X i 0 X operator i return this pr
  • 单选按钮在 Chrome 中显示不需要的白色背景。火狐浏览器没问题

    在 Google Chrome 中 单选按钮会在圆圈周围显示不需要的白色背景 这在 Firefox 中并未按预期显示 Please check these images 她是有问题的页面的直接链接 在 Firefox 和 Chrome 中检
  • 是否存在 setfable nthcdr 实现?

    我正在使用 clisp 我想知道是否有任何带有可设置版本的 nthcdr 的库可供我使用 你可以用以下方法解决它 let lst list 1 2 3 4 n 2 setf cdr nthcdr 1 n lst 5 6 7 l gt 1 2
  • 改装 400 错误请求

    这是我用于网络调用的函数 private void getSample Log d getSample OkHttpClient client new OkHttpClient HttpLoggingInterceptor intercep
  • 如何从批处理脚本检查Java安装?

    我需要编写一个批处理脚本来查找是否安装了Java 如果安装了 那么在什么路径下 我觉得它必须是类似这样的 for f j in java exe do set JAVA HOME 但我不明白 附 它必须与带有空格两个的路径一起使用 就像ja
  • Haskell主要函数

    module Main where qsort Ord a gt a gt a qsort qsort x xs qsort smaller x qsort larger where smaller a a lt xs a lt x lar