Haskell 哈斯凯尔数

我有一个问题,我想了解更多,以及如何避免。我有这个密码 len :: (Num r ) => [a] -> r len [] = 0 len xs = 1 + len ( tail xs ) avg :: (Num t) => [t] -> Double avg xs = ( sum xs ) / ( len xs ) 这将导致以下错误 len.hs:6:9: Couldn't match expected type `Double' against infe

OCaml和F#中的堆栈溢出,但Haskell中没有

为了好玩,我一直在比较不同语言执行以下程序的速度: 对于从1到1000000的i,求和乘积i*(sqrt i) 我的一个实现(不是唯一的一个)是构造一个列表[1..1000000],然后使用一个特定的函数进行折叠 该程序在Haskell中运行良好且快速(即使使用foldl而不是foldl),但在OCaml和F#中堆栈溢出 以下是Haskell代码: test = foldl (\ a b -> a + b * (sqrt b)) 0 create 0 = [] create n = n:

Haskell随机数据类型

我是哈斯克尔的新手。 我有一个数据类型: data Sentence= Prop Int | No Sentence | And [Sentence] | Or [Sentence] deriving Eq 我已经为它写了一个展示实例 然而,不管它是否有意义,我希望能够生成一个随机的句子。 如何在Haskell中实现这一点?随机数生成是“不纯”操作的典型示例,因为调用两次随机生成器当然会产生不同的结果-Haskel

Haskell 将存在主义放入单子

我有以下问题。我有类型(forall r.MyType r)的值,我需要解析sum(forall r.MyType r)。是否可以在不提供额外的数据结构的情况下执行此操作?一般来说,如果您有一个真正的存在类型,则不允许“转义”到更大的范围。类型(对于all r.MyType r)意味着“这是一个MyType r,适用于你能想到的任何r”,就像没有任何属于类型对于all a。可能是一个;这并不意味着存在一些未知的r,这样您就有了它的MyType 如果你真的想要一个多态术语,那完全是另一回事,但我假

Haskell 仿射k-代数计算库?

我正在寻找一个图书馆或计算机代数系统,可以帮助计算环中多项式的运算 F_2[x_1, ..., x_n] / <f^2 - f> 我已经在Haskell中为此编写了代码,但不幸的是性能不是很好 注:标题“仿射k-代数”来自Eisenbud的交换代数,着眼于代数几何书籍p。35; 如果有更好的名字,请编辑问题,谢谢 这些年来,我在这方面做了很多工作,发现自己喜欢使用Sage系统[http://www.sagemath.org/]. 它是非常有效的,并且对于方案和其他代数结构有一种自

Haskell 冲突单体(Text.JSON.Result&;Maybe),如何解决

下面的代码包含了2个monad的使用,以某种方式,我需要通过read\u字段中的类型来缠绕和wend实际数据 我想做的是能够从结果monad中提取字符串(如果确定),然后将其传递到get_字段,然后当它出来时,将其包装在Result中并发送到main进行打印或出错 module Main where import System.IO import System.Environment import Text.Printf import Text.JSON.Generic import Text.

Haskell GStreamer三通元件(1-N)故障

我遇到的问题与以下代码有关: module Main(main) where import qualified Media.Streaming.GStreamer as GS import Data.Maybe import System.IO import System.Exit import System.Glib.MainLoop as Glib import System.Glib.Signals as Glib import System.Glib.Properties as Gli

Haskell 如何使用Happstack创建JSON Rest API?JSON主体?

我正在尝试使用Happstack创建JSON REST api。它应该允许带有JSON主体的帖子。我该怎么做?happstack的API中的所有函数似乎都是根据参数名查找的。它认为身体总是url编码的 如果Happstack无法实现,我应该使用哪个框架?好的,下面是我的想法 {-# LANGUAGE OverloadedStrings, DeriveDataTypeable #-} import qualified Data.ByteString.Lazy.Char8 as L import H

Haskell离线文档?

为Haskell核心库(甚至更多)获取脱机文档的可能性有哪些(如果有的话) 有时我会把我的笔记本电脑带到没有wifi的咖啡厅,如果有类似的东西,但可以离线使用,那就太好了 Hoogle可脱机使用,可从Cabal安装: 有关使用说明,请参阅 用法: $ hoogle --help Hoogle v4.2.8, (C) Neil Mitchell 2004-2011 http://haskell.org/hoogle hoogle [COMMAND] ... [OPTIONS] Commands

Haskell 将新闻提要小部件插入页面

我有一个页面,我想在其中嵌入一个新闻提要小部件(这样来自某个远程站点的提要将显示在我的站点中) 虽然有相当多的免费新闻提要小部件可用(部分列表如下:),但它们都需要在html页面中插入复杂代码,而所有参数都硬编码到生成的代码中,如下所示: insertedWidgetText = "<script id=\"scrnewsblock10795953\" type=\"text/javascript\">...script specific parameters go here...&

在Haskell模式匹配中暗示相等

我正在写一个函数来简化布尔表达式。例如,Nand(A,A)=Not(A)。我尝试使用模式匹配来实现这一特定规则,如下所示: --等效操作数-简化! 简化(Nand q)=非(简化q) --操作数必须不同,因此递归。 简化(Nand q’)=Nand(简化q)(简化q’) 编译时,我得到错误信息: Conflicting definitions for `q' Bound at: boolean.hs:73:21 boolean:73:29 In an equation fo

在haskell脚本中将表达式转换为描述其类型的字符串?

我们都知道,ghci中的:t给出了表达式的类型: Prelude> :t [1..] [1..] :: (Enum t, Num t) => [t] 我需要的是haskell脚本中的:t(我称之为typeStr): 可以在屏幕上打印类似于(Enum t,Num t)=>[t]的内容 可能吗 简短回答:不 Haskell通常不允许您编写在运行时之前类型未知的表达式,因此根本不需要运行时类型查找 尽管如此,还是有一些方法可以进行动态键入,而且似乎可以支持打印类型签名。。。但这可能根本不

Haskell 指存在类型变量

我想在我的代码中为一些本地函数添加类型签名。但是,它们的类型涉及匿名的、存在绑定的类型变量。因为它们是匿名的,我不知道如何写类型签名。如何引用此类类型变量 在下面的示例中,go具有类型[b]->Int->Int,其中b是模式匹配T(x_共享:xs)g绑定的类型。我可以为它写什么样的签名 data T=forall a。T[a](a->a->Int) f::T->Int f(T(x_:xs)g)=go xs 0 哪里 --什么类型的? go(x:xs)n=go-xs$!n+gx_共享x go[]n

haskell整数加法程序

首先,有一个整数(t)表示测试用例的数量。 然后是2*t线。每行中都有一个整数。我们必须输出每两个数字的总和 样本输入: 3 1 2 3 4 5 6 样本输出: 3 7 11 import Control.Monad(复制项) main::IO() main=mapM_uu打印。这是家庭作业吗?你应该添加家庭作业标签。你在haskell做过什么?你在哪里受阻?不,我只知道C、C++和java。我想熟悉Haskell。运行循环以获取n数字并以不同的行打印它们的过程是什么?@john你尝试过学

Haskell 如何生成随机的类型化函数

我想以编程方式生成随机Haskell函数并对其求值。在我看来,实现这一点的唯一方法是基本上以编程方式生成Haskell代码,并使用GHC API或外部进程运行它,返回字符串,然后将其解析回Haskell数据类型。这是真的吗 我的理由如下。这些函数是多态的,所以我不能使用Typeable。更重要的是,即使我编写自己的类型检查器并用它的类型注释每个函数,我也无法向Haskell编译器证明我的类型检查器是正确的。例如,当我从异类函数集合中提取两个函数并将其中一个应用于另一个时,我需要向编译器提供一个保

Haskell ';捕捉';从MonadIO内部

我的程序中有一个MonadIO实例,我想从使用该MonadIO时抛出/捕获异常(来自基本包中的Control.Exception模块) 快速的谷歌搜索返回了大量的讨论(追溯到2003年)和复杂的解决方案(如实现MonadControl、MonadBase等实例),我想知道是否有一个简单/可接受/广泛使用的解决方案 如果没有,这个问题有什么好的解决方案?据我所知,Hackage中有几个包解决了这个问题,我应该使用哪一个 (顺便说一句,关于为什么我们在MonadIO中没有catch的推荐阅读资料也将

Haskell Yesod资源和URL类型安全自动化

我一直在执行一项任务来了解YesSOD的一切,我(有点)被路由系统所束缚,它与子网站和一般的交叉路由链接有关。我首先要解决的是在路线定义和Hamlet链接中找到的“ResourceR”模式 我注意到,“类型”本身(ResourceR)从未在Yesod的TH DSL之外被寻址或引用。这是否意味着它实际上只是用作虚拟类型,仅用于在引用链接时利用Haskell的类型安全性?我还注意到,getResourceR、postResourceR等函数对于应用程序的运行来说是非常重要的,但是它们的定义在样板应用

为什么无点样式在Haskell中被称为无点样式,而它充满了点?“一词”在哪里;“无积分”;起源于?

我目前正在阅读,我在第85页遇到了如下所示的概念“”。但是,fn功能是满的,有点!这使我困惑 为什么这种风格的写作功能被称为“无点”呢 满有积分吗 我应该如何理解这个概念?什么意义上的“零分” “无点风格”一词从何而来?也许是因为 用空间表示函数组合的语言 PS:到目前为止,这是这本优秀的书中唯一让人困惑的部分(也就是说,在我读到的前85页中) 但是无点有更多的点 一个常见的误解是 无点样式的“点”是(.)运算符(函数 组合(作为ASCII符号),它使用与相同的标识符 小数点。这是错误的。

Haskell IO单子的逻辑性和严格性

我正在尝试用Haskell编写一个简单的程序。它基本上应该并行运行两个shell命令。代码如下: import System.Cmd import System.Exit import Control.Monad exitCodeToBool ExitSuccess = True exitCodeToBool (ExitFailure _) = False run :: String -> IO Bool run = (fmap exitCodeToBool) . system ma

Haskell 在Yesod的i18n消息文件中包含换行符

如何在Yesod i18n消息文件中包含换行符(\n) 我尝试使用\n,但它被转义到\\n只是好奇:你为什么希望翻译中有换行符?你不能只用两个短语来代替吗?我做了一个答案,但我越是深入研究并尝试测试它(我安装了莎士比亚,它应该有必要的部分,但我不想安装像YesSOD这样大的东西),它工作得越少,我就越困惑,所以我删除了它。虽然这基本上都是“如果你在《哈姆雷特》{…}中使用它,这就不可能了”,但这可能不是一个很好的答案。@Zeta:你如何处理需要翻译的长消息?例如,针对忘记密码的罐装电子邮件,尤其

Haskell Aeson:具有默认值的泛型

今天我想解决下一个问题 假设我们将typeclassDataWithDefault定义为 class DataWithDefault a where defaultValue :: a data Example = Example { field1 :: Text , field2 :: Text } deriving (Show) instance DataWithDefault Example where defaultValue =

(编辑)如何在没有IO的情况下获得Haskell中的随机数

我希望有一个函数,在没有IO的情况下,在每次调用中返回不同的stdGen。 我尝试使用unsafePerformIO,作为以下代码 import System.IO.Unsafe import System.Random myStdGen :: StdGen myStdGen = unsafePerformIO getStdGen 但是当我试图在ghci中调用myStdGen时,我总是得到相同的值。我是否滥用了unsafePerformIO?还是有其他方法可以达到我的目标 编辑 对不起,我想

Haskell fx的优先级和结合性是什么?哈斯克尔

我知道。和$都具有正确的关联性,因此 f . g . x 会是 f . (g . x) 我也知道。优先于大多数,因此 f . x + 5 * 4 会是 f . ((x + 5) * 4) 但是当你刚刚 f g x 关联性和优先级是什么?函数应用程序在左边关联,所以 f g x 与 (f g) x 我一直记得Roger Hindley说过“函数应用程序关联到左边,就像我们在六十年代所做的那样。”。函数应用程序总是具有最高的优先级。f g x的关联性是从左到右的,因为采用了curry

使用类型对Haskell中的顺序值转换建模的好方法?

假设我有一个名为Report的假设类型,它如下所示: data Report = Report { juniorReview :: Maybe (Person, Bool) , seniorReview :: Maybe (Person, Bool) ... many other fields } addJuniorReport :: Report -> (Person, Bool) -> JuniorReport addSeniorReport :: Jun

Haskell:有序树的深度优先搜索

首先,我有一个有序树的数据类型: data OrdTree a = OrdTree a [OrdTree a] deriving (Show) 我需要按DFS(深度优先搜索)的顺序获得所有节点的列表 以下是我试图解决的问题: dfsTreeList :: OrdTree a -> [a] dfsTreeList (OrdTree a (x:xt)) = a : (dfsTreeList x) ++ (

运行函数作为Haskell中DBus通知的操作

我正在尝试制作一个应用程序,从BBC新闻网站上抓取新闻标题,在检索到文件后向用户桌面发送通知,然后让用户选择打开一个显示文章标题及其链接的窗口。除了最后一部分,一切都很好-我无法让fdo notify运行操作。我不确定语法会是什么,但我有: broadCastHeadlines = do client <- connectSession let startNote = Note { appName = "BBC News Headlines&q

Haskell GADT与平等性证明

我想在GADT中隐藏一些类型信息,这里忘记了键类型 data Query where Query :: Ord key => Map.Map key String -> Query one :: Ord key => key -> Query one k = let m = Map.insert k "hello" Map.empty in Query m 我如何传递一些等式约束以在其他地方使用它,如: other :: Ord key

Haskell 将函数作为参数传递,奇怪的情况

我担心它可能会被说成是非常令人畏缩的,但我不知道还有什么地方可以问 有一段时间,我认为如果一个函数接受另一个函数作为参数,它必须在类型中明确指出它,即f::(a->a->a)->b->c。这样我就可以将g::a->a->a作为第一个参数传递,并将具体类型参数作为第二个参数传递,但其他什么都不传递 但是我刚刚发现我可以将const::a->b->a应用于(+)::Num a=>a->a。结果是奇怪的(+)const::Num(a->b->a)=>(a->b->a)->a->b->a 这是怎样的呢?

Haskell GHC在运行时如何表示“undefined::Void”?

该类型没有值,除了未定义。GHC在运行时如何表示undefined::Void。计算thunk时,它将抛出异常 表示所有未赋值表达式的方式相同,即使用指向thunk的指针。计算thunk时,它将抛出异常 > P>不同于C++和其他现代OO语言,Haskell与GHC不给运行时带来类型,编译期间使用类型信息在类型检查中使用,然后丢失。code>Void没有任何构造函数或有意义的居民,因此它在运行时根本不存在 undefined是bottom类型,因为bottom是每个数据类型的居住者(或者bott

Haskell:hGetBuf、hGetBufSome和hGetBufNonBlocking之间的区别

有人能解释一下hGetBuf和hGetBufSome的区别吗。何时使用hGetBuf、hGetBufSome、hGetBufNonBlocking?我认为区别如下: hGetBuf阻塞执行,直到读取指定的字节数或达到EOF hGetBufSome阻止执行,直到它可以读取至少一些字节,或者直到达到EOF。它读取的字节数不超过给定的字节数 hGetBufNonBlocking不会阻止执行。它尝试读取给定数量的字节(如果有),但返回的字节可能更少

如何在Haskell中将无限列表的最后一项与有限列表连接起来?

在Haskell中,如何有效地将无限列表的最后一项与有限列表连接起来 last不起作用,它显然是从头开始迭代的,所以下面的过程永远不会结束: 编辑:我想知道Haskell对[1..]+[0]的内部表示是什么,它最初是否“完全未评估”?如果它将内部表示为两个(未计算的)列表的“序列”,则last函数可以立即获取最后一项的最后一项。对于任何表达式,通常都找不到“Haskell的内部表示”。Haskell标准没有定义内部表示;这取决于编译器选择一个 在一个幼稚的实现中,[1..]+[0]肯定会被表示

Haskell的Cofree CoMonad有哪些激励性的例子?

我一直在玩Cofree游戏,但还没玩好 例如,我想在ghci中使用Cofree[]Num,但无法获得任何有趣的示例 例如,如果我构造一个余树类型: let a = 1 :< [2, 3] 以及一种: extract a :: (Num a, Num (Cofree [] a)) => a 我可以得到一些简单的例子,甚至是一些琐碎的例子来说明如何使用Cofree函数,比如说,函子:[],或者或者或者或者,这说明了 提取 extend 展开 重复 交叉张贴: 编辑:根据David

Haskell HttpExceptionRequest(CertificateUnknown)正在运行堆栈设置

我运行的是Windows 10,在GitBash、Cygwin和DOS命令行中,无论作为用户还是管理员,都会出现相同的错误 我已经尝试过将文件提取到IE()中,正如从GitHub检索文件时遇到的类似问题所建议的那样。我可以得到文件,但堆栈之后仍然失败 在下面的评论中,我还尝试了GitBash中的curl并获得 $ stack setup -v Version 1.4.0, Git revision e714f1dd3fade19496d91bd6a017e435a96a6bcd i386 hpa

Haskell 哈斯克尔。如何计算两个字符串列表之间的差异?

我有一个问题可以描述为这种情况。 书有三种不同的类别:医学书、艺术书和历史书。 每本书有三个层次:初级、中级、高级 这些书将放在书架上。 问题是比较两个不同书架的差异 我将这个问题抽象为两个字符串列表。 例如: 医学图书->M 艺术书籍->A 历史书->H 基本->1 中级->2 高级->3 现在,书架可以定义为[“A1”、“H2”、“M3”]。 问题: 有多少本书是一样的?(同一类别同一级别) 有多少本书的类别相同但级别错误?(不包括同一本书) 有多少本书级别相同但分类错误?(不包括同一

Haskell 在整数列表中搜索,按增长排序的最长有序子集之一(不一定是连续的)

函数,它在整数列表中查找下标(不一定是连续的)数的最长有序增量之一。例如: •顺序[21,27,15,14,18,16,14,17,22,13]=[14,16,17,22] 我对从数组中获取初始数字并查找序列的函数有问题: fstLen:: Int -> [Int] -> [Int] fstLen a [] = a: [] fstLen x (l:ls) = if x < l then x:(fstLen l ls) else fstLen x ls fstL

Haskell 为什么这段代码没有空格就不能解析?

因此,我正在学习单子,并尝试使用以下表达式: [1,2]>=\x->['a','b']>=\y->return(x,y) 上述代码按预期生成结果[(1,a)、(1,b)、(2,a)、(2,b)] 但由于我只是在做实验,我变得懒惰了,于是我加入了: [1,2]>=\x->['a','b']>=\y->return(x,y)(与上面的代码相同,但没有空格) 这似乎不起作用 我理解如果我把这个表达式括起来 [1,2]>=(\x->([a','b']>>=(\y->return(x,y))) 它会起作用

Haskell 在GHC-8.2.2中,重叠实例解析是否取决于文件是否包含为公开模块?

我遇到了以下GHC-8.2.2中难以理解的行为 我有一些重叠的typeclass实例。没有不连贯的typeclass实例。大概有一个表单的typeclass实例 instance (C f h, C g h) => D1 (D2 f g) h 其中C具有重叠实例。当我将项目加载到堆栈repl中时,一切正常。这个实例的上下文被解析为我正在寻找的C的实例 如果我创建了一个文件test.hs,该文件导入了属于上述实例的数据类型,那么一切都不顺利。当我将其加载到stack repl,并调用D1

在haskell中定义自定义类型

我是haskell的新手,我定义了一个自定义列表类型。我注意到它只在类型为Num的情况下工作。如果我想让它处理所有类型,例如Char,我应该更改什么 data List a = ListNode a (List a) | ListEnd mymaximum::List a -> a mymaximum ListEnd = 0 mymaximum (ListNode x xs) | x > maxxs = x | otherwise = maxxs whe

Haskell 你是如何为哈斯克尔找到最新版本的阴谋集团的?

我刚刚花了大约一个小时兜圈子,试图得到阴谋集团的第二版。最初我发现我的LinuxMint安装附带的版本是版本1,所以我尝试了cabal update,但没有这样做。所以我找到了使用cabal-install-cabal-cabal-install的说明。做了,出错了。发现错误显然与使用Haskell的最新版本有关。所以我安装了版本7来获得阴谋集团。似乎有效,看起来我终于得到了阴谋集团版本2。但我也想要Haskell的最新版本,所以我下载了它的二进制文件并再次安装了它——现在看来Cabal已经回到

Haskell 如何使用hpack拥有多个库?

我希望将我的项目组织到不同的库中,因为最终我可能会将一些库拆分到外部存储库中 在.cabal文件中,我可以有多个库(我相信一个未命名,多个命名): 最初,我在我的hpack软件包中尝试这样做。yaml: library: bar: source-dirs: - src dependencies: - servant-server >= 0.14 - wai - warp foo: source-dirs:

Haskell 无法使用单例库将类型级别列表转换回值级别

我正在尝试编写一个经过合理静态检查的授权系统[1],目前正在努力编写一个函数,将所需权限从类型级注释/幻影提取到值级 {-# LANGUAGE DataKinds, GADTs, ScopedTypeVariables #-} module Try5 where import Control.Monad.Reader import Data.Singletons import Data.Singletons.TH data Permission = PermA

Haskell 我不理解自然值(参数)是如何工作的

我不明白为什么“logistic0”函数在实现时不需要参数,为什么不需要在“logistic”函数中将自然值作为参数传递。另外,计算时间取决于ex1值,为什么 logistic :: Num a => a -> a -> Natural -> a logistic rate start = f where f 0 = start f n = rate * f (n - 1) * (1 - f (n - 1)) logistic0 :: Fracti

Haskell 如何在快速检查中使用自定义列表

在我的代码中,我需要生成一个点的列表 我已经在任意类型类中实例化了自定义类型点。 到目前为止还不错 现在我需要生成一个列表:[Points] 但是QuickCheck生成的默认随机列表(使用listOfI-crease?)对我不起作用。 因为我需要点之间的一些特殊关系。我知道生成器组合器,例如suchAs,但它们太慢了(因为关系非常罕见) 我已经定义了一个定制的Gen[Point]来满足我的需要 randomBoard :: Gen [Point] randomBoard = ... 但是我不

重复附加到字符串haskell

嗨,我是哈斯凯尔的新手,不知道该怎么做。到目前为止,我有以下代码 ask :: String -> IO () ask prompt = do putStrLn prompt line <- getLine if line == "" then ask "please try again" else putStrLn ("you said: " ++ reverse line) main :: IO () main = do ask "ple

Haskell 如何将Aeson对象解析为自己的自定义类型?

我正在尝试用Aeson编写JSON解析器 我在代码中调用JSON的方式: testReq :: Request testReq = parseRequest_ "https://api.openweathermap.org/data/2.5/onecall?lat=41.63526&lon=-70.92701&exclude=minutely&appid=93120a85abf28f8fb1cdae14ffd7435d&units=metric&quo

关于可能缩进错误的Haskell错误

在下面的Hasekll代码中 func1 :: Int -> [Int] func1 m = aux 2 where aux h = | length (func2 h) >= m = take m (func2 h) | otherwise = aux (h + 100) GHC给出的误差为 parse error (possibly incorrect indentation or mismatched brackets)

  1    2   3   4   5   6  ... 下一页 最后一页 共 309 页