我是Haskell的新手并试图了解monad.我将通过此代码 将其放在这里以供快速参考
newtype State s a = State { runState :: s -> (a,s) }
instance Monad (State s) where
return a = State $ \s -> (a, s)
State act >>= k = State $ \s ->
let (a, s') = act s
in runState (k a) s'
get :: State s s
get = State $ \s -> (s, s)
put :: s -> State s ()
put s = State $ \_ -> ((), s)
modify …Run Code Online (Sandbox Code Playgroud) 在尝试时cabal sandbox我发现你无法base在沙箱中安装不同版本和其他一些软件包,如本答案所述.
我想知道GHC中哪些软件包是硬连线的.某处有完整的清单吗?我用谷歌找不到它.我不只是想获得使用ghc安装的软件包列表.我想知道哪些软件包是GHC固有的,即使在沙箱中也无法安装这些软件包的多个版本.换句话说,哪些套餐根本不适用于cabal沙箱?
虽然cabal install gd我试图遇到以下错误
Configuring gd-3000.7.3...
cabal: Missing dependencies on foreign libraries:
* Missing (or bad) header file: gd.h
* Missing C libraries: gd, png, jpeg
This problem can usually be solved by installing the system packages that provide these libraries (you may need the "-dev" versions). ...
Run Code Online (Sandbox Code Playgroud)
它说 Missing C libraries: gd, png, jpeg
我想我是对的,如果我把它解释为:缺少的库是一些未指定版本的:libgd,libpng,libjpeg和他们的-dev versions.
我们看到cabal没有报告这些库的版本,因此很难确定它需要哪个版本的外部库.
我gd.cabal从hackage网站上读到了这个
有一条线说:
Extra-libraries: gd, png, z, jpeg, …
我正在阅读Chris Okasaki撰写的这篇论文 ; 标题为"广度优先编号:算法设计中小练习的教训".
问题是 - 算法中的魔法是怎么发生的?有一些数字(例如图7标题为"将一个级别的输出线程化为下一级别的输入")不幸的是,也许只有我,但这个数字让我感到困惑.我不明白线程是如何发生的?
我正在努力学习Haskell并努力学习二进制IO.此代码改编自我之前的一个问题的答案中给出的代码.
我试图从给定的文件中读取很多Word32值和一些Word8值(元数据).目前,我编写的程序只是将Word32文件中的值读入未装箱的矢量.
此代码的问题在于它replicateM在Word32从文件中读取多个值时使用list(via ).我想摆脱中间列表(出于效率原因),并希望使用ByteString直接在文件的向量中读取数据.
这是我完整的工作代码.
import Data.Word
import qualified Data.ByteString.Lazy as BIN
import Data.Binary.Get
import Data.Binary.Put
import qualified Data.Vector.Unboxed as V
import Control.Monad
import System.IO
main = do
h_in <- openFile "dat.bin" ReadMode
v <- readInVector 10 h_in
putStrLn (show v)
hClose h_in
readInVector n h_in = do
bin1 <- BIN.hGet h_in (n*100)
let ints1 = runGet (replicateM n getWord32le) bin1
let v = V.fromList (ints1) :: V.Vector …Run Code Online (Sandbox Code Playgroud) 我碰到了这个.gitignore文件,无法理解。特别是第一行*~和第二行也是如此。
以下是完整的内容,供快速参考:
*~
\#*\#
*.swp
tmp/*
private/**/*
public/cache
.DS_Store
.#*
example_presentation.html
Run Code Online (Sandbox Code Playgroud)
请解释一下。在哪里可以找到gitignore使用的模式的详细语法(除手册页外)?
我已经尝试过的人的页面,但很可惜,我发现模式的描述有不那么有用。因此是一个问题。
在尝试安装friday软件包时,我收到了错误消息
Preprocessing library friday-0.2.2.0...
src/Vision/Detector/Edge.hs:3:14: Unsupported extension: MultiWayIf
cabal: Error: some packages failed to install:
friday-0.2.2.0 failed during the building phase. The exception was:
ExitFailure 1
Run Code Online (Sandbox Code Playgroud)
如何解决此错误?
我正在使用ghc版本7.4.1和
cabal-install version 0.14.0
using version 1.14.0 of the Cabal library
Run Code Online (Sandbox Code Playgroud) 我想在给定的给定时间内添加/减去给定的分钟数并找出结果时间.
例如,假设给定时间是11:30 AM,添加的分钟数是100,那么结果时间是01:10 PM
如何使用Data-Time库在Haskell中完成?我尝试在Haskell网站上阅读文档,但几乎找不到任何东西.
该文档站点上没有显示示例.此外,Haskell网站上的食谱不包含任何时间计算示例.
编辑:不需要当前时间,它应该适用于任何给定的时间.时间可以像"11:30"这样的字符串给出.
我无法找到一个简单的例子(对不起我的谷歌技能)在哈斯克尔现场展示了如何使用该Data.Time功能来转换格式String到UTCTime,然后能够从加/减分/秒和转换回UTCTime至格式String。
我要寻找一个例子,说明如何转换String(例如像"10:20:30"到UTCTime,然后加1000秒,那个时候,怎么办使用此哈斯克尔Data.Time库,而完全不使用IO?
函数的类型应为FormatTime -> String -> UTCTime。
该函数应使用TimeLocale或FormatTime需要区域设置/格式。
库中有太多的函数,而且类型太多,以至于令人困惑。readTime,TimeLocale,ParseTime t,NominalDiffTime,Time,什么不是。
请不要仅指向Haskell网站上的文档。大多数文档都只是源代码中的类型签名转储,几乎没有任何示例。抱歉,这很糟糕,但是我花了很多时间试图从那些文档中找出一些东西。
将此与Python文档进行比较。这么多美丽的例子。谢天谢地,有。
我想在Haskell中编写一个类似hexdump的程序.我编写了以下程序,我很高兴它可以工作并提供所需的输出,但它非常慢且效率低.它是根据这个答案中给出的程序改编的.
我用一个示例文件运行程序处理少于1MB的文件大约需要1分钟.标准的Linux hexdump程序可以在不到一秒的时间内完成工作.我想在程序中做的只是read-> process->在bytestring中写入所有单个字节.
这是一个问题 - 如何有效地读取/处理/写入字节串(逐字节,即不使用任何其他函数getWord32le,如果这是需要的)?我想对每个单独的字节进行算术和逻辑运算,而不是Word32le像那样的字节组.我没有找到像Byte这样的数据类型.
无论如何,这是我写的代码,它在ghci(版本7.4)上成功运行 -
module Main where
import Data.Time.Clock
import Data.Char
import qualified Data.ByteString.Lazy as BIN
import Data.ByteString.Lazy.Char8
import Data.Binary.Get
import Data.Binary.Put
import System.IO
import Numeric (showHex, showIntAtBase)
main = do
let infile = "rose_rosebud_flower.jpg"
let outfile = "rose_rosebud_flower.hex"
h_in <- openFile infile ReadMode
System.IO.putStrLn "before time: "
t1 <- getCurrentTime >>= return . utctDayTime
System.IO.putStrLn $ (show t1)
process_file h_in outfile
System.IO.putStrLn "after time: " …Run Code Online (Sandbox Code Playgroud) haskell ×9
cabal ×3
binary ×2
time ×2
algorithm ×1
bytestring ×1
clock ×1
dependencies ×1
ghc ×1
git ×1
gitignore ×1
io ×1
parsing ×1
performance ×1
sandbox ×1
state-monad ×1
tree ×1
vector ×1