默认值
[1..5]
给这个
[1,2,3,4,5]
也可以使用范围功能完成。是否可以更改点之间的步长,这样我就可以得到如下结果
[1,1.5,2,2.5,3,3.5,4,4.5,5]
你必须小心使用浮点运算。它不能精确地表示1.1,所以如果您尝试
Prelude> [0,0.1 .. 1]
[0.0,0.1,0.2,0.30000000000000004,0.4,0.5,0.6,0.7,0.7999999999999999,0.8999999999999999,0.9999999
我从GHCi收到一条关于“已注册的符号模块的重复定义”的错误消息,如下所示:
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
__module_registered
whilst processing object file
/usr/local/lib/ghc-6.2/HSfgl.o
如何修复此问题?这很简单,可能表明在为GHC
我在编译时收到以下错误消息:
重复类型签名:
weightedMedian.hs:71:0-39:findVal::[ValPair]->Double->Double
weightedMedian.hs:68:0-36:findVal::[ValPair]->Int->Double
我的解决方案是让findValI和findValD。但是,findValI只是将Int类型转换为Double并调用findValD
此外,我不能对Num(Int,Double)类型进行模式匹配,因此我不能将类型签名更
每当我开始拥抱时,它总是说
Haskell 98 mode: Restart with command line option -98 to enable extensions
您是如何做到这一点的?好吧,只需添加-98作为命令行选项
请参阅。好的,只需添加-98作为命令行选项
请参阅。如果从命令行(Bash提示符、Windows命令提示符等)启动它,只需将命令从..更改为-98。(例如,如果您一直在运行命令haskell,则现在将运行命令haskell-98)
如果要从Windows中的快捷
我有一个YesSOD 0.9.3框架站点,每个页面都有一些不同的小片段,比如从数量不确定的搜索结果生成的特定id属性的样式,我想将它们放在页面的或标记中,这样它们就不会污染我的/static/tmp(而其余的lucius/julius模板则放在生成的文件中,导致整个站点有十几个这样的文件)
addJulius和addLucius将其内容包含到一个通用的.js或.css文件中(至少对于Lucius),该文件根据其内容生成
有没有比这更简单的方法
toWidgetHead [hamlet| <
我的目标是列出数组a中值大于其索引位置的所有元素。我写了这样一个Haskell代码
[a|i<-[0..2],a<-[1..3],a!!i>i]
[a | i给定表达式a!!i,Haskell将推断a是一个列表(即a:[a])。给定表达式a(因为您是从Num a=>a值列表中绘制a)为了统一这些类型,Haskell得出结论认为a实际上必须是numa=>[a]类型
归根结底,将a视为一个上下文中的列表和另一个上下文中的数字列表中的元素是没有意义的
编辑
我想你可以用这样的东西做
我有以下代码:
import Text.Pandoc
myWriterOptions = defaultWriterOptions
{ writerHtml5 = True
, writerStrictMarkdown = False
}
markdownToHtml :: String -> Html
markdownToHtml = writeHtml myWriterOptions . readMarkdown defaultParserState
前几天我试着把一个资源池和HDBC放在一起,但注意到每次查询的内存都在不断增加。然后,我使用尽可能少的函数组合了一个简单的测试代码,得到了以下结果:
data SQL = SQL (Pool Connection)
check :: SQL -> IO ()
check (SQL pool) = do res <- query' pool "show status like 'Threads_conn%'" []
threadDelay 1
我的职能如下:
foo :: Int -> a -> [a]
foo n v = bar n
where
bar :: Int -> [a]
bar n = take n $ repeat v
使用ghci报告此错误:
Couldn't match type `a' with `a1'
`a' is a rigid type variable bound by
我开始对函数图形感兴趣。通过我到达的目的地。有什么介绍吗?关于黑客攻击的文档非常多,示例有点长,虽然有趣,但不允许开始使用。目前还没有教程级的材料。由于LambdaCube仍处于不断变化的阶段,任何类型的指南几乎都会立即失去其相关性。唯一保持最新的是存储库中的示例,即使它们没有文档记录,因此如果您想从今天开始使用它,我仍然建议您阅读这些示例。特别是,设计为独立的:它展示了如何从头构造网格和管道描述
需要注意的是,Hackage上的LambdaCube版本仍然是旧引擎,它与您在博客上读到的内容无关
我目前正在学习如何编写类型类。我似乎无法编写出现不明确编译错误的Ord类型类
module Practice where
class (Eq a) => Ord a where
compare :: a -> a -> Ordering
(<), (<=), (>=), (>) :: a -> a -> Bool
max, min :: a -> a -&g
我想学习F#,但有一件事让我感到困惑,那就是计算表达式(do notation??)语法和去语法
在haskell中,您有一个非常简单的Monad类型类和规则,用于将do符号分解为bind和return。添加关键字没有什么神奇之处;唯一必须匹配的是类型
在F#中有许多构建器、关键字和复杂性
对于如何将一个概念映射到另一个概念,是否有很好的解释
我基本上想知道我是如何绘制地图的
do
x <- monadicComputation
foo x
someOtherMonadicCo
是否有Data.Time.Calendar.Day的Data.Binary实例
更一般地说,如果广泛使用的库中没有为特定数据类型提供Data.Binary,该怎么办?如果您只是创建一个Binary实例并将其放置在您的模块中,那么您将创建一个孤立实例,这可能会在以后有人导入您的模块时造成很多混乱--它将被拖动沿着那个孤立实例,可能与他们对如何将日期设置为二进制的理解相冲突
如果您有一个非常规范的实例,请尝试将其推送到库作者处。如果添加实例是一个好主意,并且它可以使使用该库的任何人受益,那么添加实例
描述了哪些操作可以引发异步异常,即使在掩码ed块中也是如此,说明:“以下操作保证不可中断”
如果MVar肯定已满,则取MVar,反之,如果
MVar绝对是空的
从编译器的角度来看,MVar在什么情况下“肯定”是满的还是空的?这是否已经足够好地定义,可以在不处理每个MVar操作上的异步异常的情况下,对代码是否会中断进行推理?编译器没有做出保证,这就是为什么他们这么说的原因
特别是,如果MVar已满,则takeMVar不会阻塞,因此不能中断。同样,对于空的MVar和putMVar,由于它没有阻塞,因
为什么下面的程序不打印我的输入?似乎putStr没有接受输入。getContents是如何工作的
main = do
contents <- getContents
when (length contents < 10) $ putStr contents
main=do
contents如果您正在执行交互式应用程序,那么获取getContents的长度是个坏主意。这是因为标准输入的长度只能在流关闭时计算。这意味着您必须在Linux上使用Ctrl+d,在W
我很想知道在Haskell通过网络发送10GB数据的最佳方式是什么?我不想在不编写解码/编码器的情况下将其作为二进制文件发送。最好是严格还是懒惰?您也可以使用管道。zlib压缩网络示例可以是:
module Main where
--------------------------------------------------------------------------------
import Pipes
import qualified Pipes.Prelude as P
impor
我计划使用haskell创建一个游戏,但无法找到捕捉关键事件的方法,如按下键盘上的上下左右键。
我尝试了getChar,但它没有捕获这些。(或者我可能不知道它是如何做到的)
另外,捕获CTRL、ALT组合也很好。异步键盘IO是特定于操作系统的,因此您需要一个库来抽象它
至于它的“处理”部分,这些库通常允许您注册事件的回调。例如,您可以使用STM中的TQueue来推送事件,然后在纯代码中按顺序处理它们
在实践中有一个很好的例子。如果你想创建一个文本游戏,那么为它拉一整件东西可能是过火了;也许要找一
是否有一个常用的Haskell习惯用法来记忆类型为的递归函数
Ord a => a -> SomeType
(Int, Int, [Int]) -> Int
特别是,我有一个类型为的递归函数
Ord a => a -> SomeType
(Int, Int, [Int]) -> Int
我想记录的。您的数据类型
(Int, Int, [Int])
可以映射到整数。前2个Ints只是一组位,而Ints的列表只是一组位,一次一组地出现。由于可以为整数创建
我决定简化代码,看看是什么条件导致了错误。我从一个简单的嵌套“s”开始,类似于sts(STArray sxy)这样:
{-# LANGUAGE RankNTypes #-}
import Control.Monad.ST
import Control.Applicative
data Foo s = Foo { foo::Bool }
newFoo :: ST s (Foo s)
newFoo = return $ Foo False
为了测试状态代码,我运行以下转换:
changeFoo
标签: Haskell
reactive-programmingreactive-banana
我正在学香蕉。为了理解这个库,我决定实现一个虚拟应用程序,每当有人按下按钮时,它就会增加一个计数器
我使用的UI库是Gtk,但这与解释无关
下面是我提出的一个非常简单的实现:
import Graphics.UI.Gtk
import Reactive.Banana
import Reactive.Banana.Frameworks
makeNetworkDescription addEvent = do
eClick <- fromAddHandler addEvent
我有以下定义的状态Monad,我正试图用它实现一个增量函数:
data State a = State (Int -> (a, Int))
instance Monad State where
return x = State $ \s -> (x, s)
(State f) >>= k = State $ \s ->
let
(x, s') = f s
State f' = k x
in f' s'
get :
我正在试验一些数学函数,并得出以下结论:
import Data.Bits
mulGF2n a b g = divModGF2n (mulGF2 a b) g
where
mulGF2 a b
| a == zeroBits = zeroBits
| otherwise = xor (if testBit a 0 then b else zeroBits) (mulGF2 (shiftR a 1) (shiftL b 1))
divModGF2n
其中有一个代码片段:
type GeneratorState = State StdGen
rollDie :: GeneratorState Int
rollDie = do generator <- get
let (value, newGenerator) = randomR (1,6) generator
put newGenerator
return value
类型生成器状态=状态StdGen
rollDie::Gener
给定以下类型族(应反映同构A×1≅ (A)
以及根据其定义的数据类型
data T a = T Integer (P (T a) a)
某种类型的黑客是否可能为后者编写一个函子实例
instance Functor T where
fmap f = undefined -- ??
直观地说,根据f的类型,很明显该做什么,但我不知道如何用Haskell来表达它。我倾向于用Agda来解释这些更高级的程序
这里的问题是,您想要在*(在Agda中设置)上进行模式匹配,违反了注释中提到的参数化。
我是Haskell的新手,并编写了以下小代码,但由于循环异常而失败。问题是代码不使用循环,甚至不使用递归。
那真让我发疯
gameList :: [Int]->Int->Int->[(Int, Int)]
gameList org pos step =
let next = (mod (pos + step) 2) ;
pos = next;
in [(pos, pos)]
然后将其保存在一个文件中,并成功地以
我编写了一个函数,将函数列表应用于一个项
applyAll :: [a -> b] -> a -> [b]
applyAll [] _ = []
applyAll (f:fs) x = (f x) : (applyAll fs x)
有更好的方法吗?您可以使用:
applyAll l v = fmap ($ v) l
fmap将函数提升到输入列表上(实际上是任何函子)$具有类型(a->b)->a->b,因此它将函数应用于给定值($v)是一种将给定函数应用于v的方法,Lee
我试图使用GHC.Generics编写一个泛型函数,该函数将返回值中使用的所有数据类型名称
以下是我到目前为止的情况:
{-# LANGUAGE DefaultSignatures, DeriveGeneric, TypeOperators, FlexibleContexts #-}
{-# LANGUAGE MonomorphismRestriction #-}
module Lib4 where
import GHC.Generics
class Names f where
nam
我刚刚完成了《学好Haskell》的第11章,我想在继续之前更好地理解应用函子。我有以下ghci代码
let a = Just (5+) -- Instead of mapping + to Just 5
let b = (3+) <$> a -- I imported Control.Applicative even though most of these modules are deprecated
let c = Just (3+) <*> a -- I expe
我正在尝试使用HUnit编写一个简单的单元测试
我将测试放入的模块名为“MyTests”
我可以从cabal repl中完美地运行此模块:
λ> run
Cases: 1 Tried: 1 Errors: 0 Failures: 0
Counts {cases = 1, tried = 1, errors = 0, failures = 0}
我想将这些测试与Cabal集成,这样我就可以运行Cabal测试
通过几个小时的谷歌搜索,我发现我应该能够使用以下序列测试我的应用程序:
ca
这是使用高阶函数、保护、where和递归的Mergesort实现
但是,从编译器获取错误6:26:在输入“=”上解析错误
mergeSort :: ([a] -> [a] -> [a]) -> [a] -> [a]
mergeSort merge xs
| length xs < 2 = xs
| otherwise = merge (mergeSort merge first) (mergeSort merge secon
我在使用系统.Random库,遇到了一些我不完全理解的行为。下面的shuffle函数是的一个实现,它也可以作为随机样本使用,无需替换。例如,用一个列表调用shuffle,列表的长度将洗牌整个列表,但用一个列表调用它,数字2应提取长度为2的随机样本
import Control.Monad as M
import Control.Monad.ST
import Data.Vector.Unboxed
我将矩阵的数据类型定义为矩阵a。在我的程序中的大多数地方,我将它与字符串一起用作矩阵字符串,或与其他矩阵一起用作矩阵(矩阵a)
我需要编写一个函数,根据某些规则填充矩阵的内容。对于字符串矩阵,签名应为:
pad :: Matrix String -> Matrix (Matrix String)
因为每个字符串都被转换成一定大小的矩阵
对于包含其他矩阵的矩阵,函数应为:
pad :: Matrix (Matrix a) -> Matrix (Matrix a)
因为在这种情况下,
我想实现可折叠的
data Constant a b = Constant a
这是我直截了当的尝试:
instance Foldable (Constant a) where
foldr f b (Constant a) = f a b
我想理解的编译错误部分是:
Couldn't match expected type ‘a1’ with actual type ‘a’
‘a1’ is a rigid type variable bound by the type signature
Haskell是否有标准的队列实现?我看到了几个相当成熟的优先级队列实现,但没有简单的队列。Sequence看起来还可以,但我认为我们可以用更严格的数据类型获得更好的性能。此外,限制操作(即,不是deque)可以防止bug从错误的一端退出队列
编辑:
为了澄清,我希望有一个成熟的Haskell实现,最好是在Haskell平台或Hackage中实现 冈崎在他的书中将FIFO队列描述为一对前后列表,其中前列表按正确顺序包含队列的前元素,后列表按相反顺序包含队列的后元素
其思想是将新项目插入到后面列表
我搞不懂这个密码。我想创建一个函数,该函数将字符串列表作为输入,并返回包含列表中所有字符串的最短超弦。比如说,
superstring "fire" "red" "blue" = "firedblue",
因为“re”在“fire”和“red”中重叠
我正在使用辅助函数“重叠”来辅助此函数:
overlap :: Eq a => [a] -> [a] -> [a]
x `overlap` y = prefix ++ y
where (p
标签: Haskell
packagescabalhaskell-stack
事实证明,我的应用程序名与上载到hackage的其中一个软件包相同,因此,当我尝试使用堆栈解算器--resolver lts 7.12解析额外的依赖项时,我得到以下错误:
$ stack solver --resolver lts-7.12
Using configuration file: stack.yaml
Using cabal packages:
- html-parse.cabal
Using resolver: lts-7.12
Using compiler: ghc-8.0.1
我正在Haskell项目中使用monad transformer RWST。下面是我的源代码:
type HSL a = RWST HBConfig [HBLog] a IO a
runScript :: (HLanguage a, BuilderHSL a)
=> HBConfig
-> HSL a
-> String
runScript hbConf srcHSL =
unsafePe
在下面的代码片段中,您可以看到我在Haskell中编写的两个collatz函数。对于递归应用程序,我在第一个示例(collatz)中使用括号来获得正确的优先级
正如我刚刚用$学习函数应用程序一样,我试图用那个东西重写函数(collatz')。但是,我遇到了以下错误:
无法匹配预期的类型“[a]”
针对“(:)”的第二个参数中的推断类型“a1->[a1]”,即“($)”的第一个参数中的“collatz”,即“n:
表达式:n:collatz'$n`div`2中的collatz''
这不起作用,我觉
Haskell中是否有类似于以下代码的等效语句:
x != y
例如:
[x+y | x <- list1, y <- list2, x != y]
[x+y | x对于“不相等”比较运算符,正确的Haskell名称是/=。N.B./=在某些方面是有意义的,因为1.变量是不可变的,所以像+=,/=,-=等运算符不在基础语言中2.它看起来有点像≠.Nitpick:/=是一个正常的函数,而不是“Haskell语法”。(/=)x y也可以工作。@ThomasM.DuBuisson我同意
标签: Haskell
monadsmonad-transformerswriter-monad
小结:在使用Writer monad时,我希望能够在不丢失状态的情况下在两个不同版本的mappend之间切换
我使用两个布尔标志来跟踪某些状态:
data Flags = F Bool Bool
现在我定义了两个Monoid实例,它们在组合mappend中的标志方面有所不同:
newtype XFlags = XF Flags
instance Monoid XFlags where
mempty = XF (F True False)
(XF (F s0 c0)) `mappend
基本思想是:我有一个工作区列表,每个工作区都有自己独特的布局。我想从所有这些特定的布局中创建主布局挂钩,而不需要在工作空间“1”(布局完整)上写入
layouts = onWorkspace "1" layout1 $ onWorkspace "2" layout2 ... $ Layout Full --last layout is the default
这很棘手的原因是onWorkspace“a”布局的返回类型-它返回LayoutClass l Window=>PerWorkspace
我的应用程序是用yesod sqlite堆栈模板构建的。将其配置为不显示迁移执行的SQL的最佳方式是什么?理想情况下,将其重定向到某个文件
我必须有点傻,但我看所有的博客和文档
我不知道如何使用简单的键->值创建简单的地图集合
对不起,我是个新手。首先,确保您有通过cabal或stack安装的容器包。我假设您想使用最新版本的。你发布的关于黑客攻击的链接指向该软件包的非常旧的版本
然后导入数据.Map
import qualified Data.Map.Strict as Map
import Data.Map (Map())
使用fromList函数创建地图
-- map with ints as keys and strings
为什么这个问题有人可能会说zip是一种Applicative方法,通常的例子是。我对它不满意,因为它不安全。我也对它感到不高兴,因为它是包罗万象的,过于复杂,对于一般情况来说不够具体
合法类Haskell中的某些类型类可能被称为合法类。这意味着,他们必须保持平等——一个阶级的法则。这些规律通常来自于对编程的一个方面的范畴论概念化。例如,Monad是通过同名范畴理论设备对计算(无论其含义如何)进行的概念化
重叠对象要处理一盒又一盒对象,通常的操作是将它们放置在彼此的顶部,如果它们是幺半群,它们将合
我想打开一些文件描述符(文件、套接字、管道等),然后启动一个进程,例如,使用,以便上面打开的文件描述符可以作为子进程的文件描述符3使用
是否有提供这种开箱即用行为的软件包或模块
我知道,我可以自己在子文件中进行文件描述符的分叉和重新映射。如果您设法在文件描述符3处打开h,您可以尝试createProcess(proc“command”[]){std_out=UseHandle}。应该有办法做到这一点。stdout总是文件描述符1,所以这没有帮助。但是它表明,在某个地方一定已经有一些文件描述符的重
我正在NixOS上运行一个Haskell项目(使用stack),该项目利用了XDG\u RUNTIME\u DIR(如果有必要,这是一个使用X11后端运行的wayland合成器项目)。当我的程序启动时:
stack exec my-compositor-project-exe # nix is enabled by default
我得到一个错误:
error: XDG_RUNTIME_DIR not set in the environment
但是,如果使用--no nix pure运行
我正在尝试进行wilcoxonMatchedPairTest,如下所示:
但是,我得到了以下错误:
rnwilcox.hs:10:50: error:
• Couldn't match expected type ‘Data.Vector.Unboxed.Base.Vector
(a0, a0)’
with actual type ‘[(Double, Double)]’
我正在尝试使用req-Haskell包从端点检索响应
我知道我需要使用类型注释来指定“a0”应该是什么,但我不确定“a0”指的是什么以及应该给出什么类型
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Control.Monad.IO.Class
import Data.Aeson
import Network.HTTP.Req
main :: IO ()
main = runReq defaultHttpConfig
如何将Numeric.lineargebra.Static.R转换为Numeric.lineargebra.Static.C(所有虚部均为零?)
听起来像是一个直截了当的问题,但从我所看到的所有map-like函数的输入与输出字段相同。例如:
dvmap :: (...) => (field -> field) -> vec n -> vec n
zipWithVector :: (...) => (field -> field -> field) -&
我想我的愿望是很超前的
所以我有一个字符串,例如“abc1abc2abc3”
我想将每个数字替换为给定数字的字符“X”。
所以“abc1abc2abc3”->“abcXabcXXabcXXX”
我知道我只得到整数这里有一些问题。您没有映射到givenString,而是映射到myFunction。因为myFunction是一个函数,所以它不起作用。因此,我们应将映射表达式替换为:
myFunction givenString = let … in map replaceEveryNu
1 2 3 4 5 6 ...
下一页 最后一页 共 475 页