小编Joh*_*ler的帖子

Windows 10更新似乎打破了GHC

我有最新的Haskell平台(8.0.2),似乎Windows10(1703)的强制更新打破了GHC.有关于此的票证(#13411),似乎我需要替换我的构建中的gcc.exe文件.

我在哪里可以找到合适的gcc.exe文件以及我在哪里放置它(假设标准安装Haskell平台)?

haskell ghc windows-10

5
推荐指数
2
解决办法
176
查看次数

围模板功能找不到Libz.so

<command line>: can't load .so/.DLL for: libz.so (libz.so: cannot open shared object file: no such file or directory)

这是我在尝试安装某些WAI库时遇到的错误:

  • 围应用静电-3.1.6.2
  • 围的WebSockets-3.0.1.2

这似乎与模板Haskell有动态链接问题有关.链接到zlib(或libz或z或libz1g或其他任何月份包管理器选择调用标准压缩库的味道)的其他包工作正常,只有那些试图在编译时动态链接到它的包时间.

我用过 nix-env -i zlib && nix-shell -p zlib

我做apt-get installzlib1g,zlib1g-dev,lib32z1,zlib1g:i386,的libc6-I386, ,lib32stdc++6,lib32gcc1(?!)lib32ncurses5其他zlib的问题的建议.

whereis libz.so给人/usr/lib/x86_64-linux-gnu/libz.a /usr/lib/x86_64-linux-gnu/libz.so所以我觉得库实际安装.

我通过剥离所有的TH代码得到了一个精简版的wai-app-static工作,但我无法在不打破整个包的情况下从wai-websockets中提取它.

有没有人找到一种方法来安装这些库,最好是使用Nix,但是在这一点上我可以实现它.我已经尝试了三天来获得一个有效的构建,并且已经耗费了整个星期的项目时间,而没有编写我自己的代码.我会采取任何可行的黑客攻击.


有人要求使用命令行.这是由cabal生成的:

/home/jfmiller28/.nix-profile/bin/ghc --make -fbuilding-cabal-package -O -static -dynamic-too -dynosuf dyn_o -dynhisuf dyn_hi -outputdir dist/build -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build …
Run Code Online (Sandbox Code Playgroud)

haskell zlib yesod template-haskell haskell-wai

5
推荐指数
1
解决办法
310
查看次数

在默认的 Haskell Stack 项目中构建多个可执行文件

我使用默认stack new设置来设置一个项目,该项目将一个服务器和一个客户端作为单独的可执行文件。我package.yaml以正确的方式更改了文件(截至 2020 年 4 月 21 日“没有用户指南”),并向我的app目录中添加了一个名为Client.hs.

我收到一条错误消息:“为非法列在‘其他模块’中的主模块‘Main’启用变通方法!”

我如何让堆栈构建客户端和服务器?

当我跑stack build我得到:

[... clip ...]
Building executable 'ObjectServer' for ObjectServer-0.1.0.1..
[4 of 4] Compiling Client
Linking .stack-work\dist\29cc6475\build\ObjectServer\ObjectServer.exe ...
Warning: Enabling workaround for Main module 'Main' listed in 'other-modules'
illegally!
Preprocessing executable 'Client' for ObjectServer-0.1.0.1..
Building executable 'Client' for ObjectServer-0.1.0.1..
[3 of 3] Compiling Client

<no location info>: error:
    output was redirected with -o, but no output will be …
Run Code Online (Sandbox Code Playgroud)

haskell cabal haskell-stack hpack

5
推荐指数
1
解决办法
421
查看次数

测试ruby中的线程代码

我正在delayed_job为DataMapper 编写一个克隆.除了工作进程中的线程之外,我已经得到了我认为正在工作和测试的代码.我查找delayed_job了如何测试这个,但现在有对该部分代码的测试.下面是我需要测试的代码.想法?(我正在使用rspec BTW)

def start
  say "*** Starting job worker #{@name}"
  t = Thread.new do
    loop do
      delay = Update.work_off(self) #this method well tested
      break if $exit
      sleep delay
      break if $exit
    end
    clear_locks
  end

  trap('TERM') { terminate_with t }
  trap('INT')  { terminate_with t }

  trap('USR1') do
    say "Wakeup Signal Caught"
    t.run
  end
Run Code Online (Sandbox Code Playgroud)

另见这个帖子

ruby multithreading unit-testing rspec

4
推荐指数
1
解决办法
2463
查看次数

在llvm绑定中将函数作为形式参数传递时,上下文减少堆栈溢出

我试图解决当我使用Haskell llvm绑定时发生的编译时错误.

代码:

-- Line 14 follows
type Acc = Int32 -> Int32 -> IO Int32
type Sig = Int32 -> Ptr Int32 -> Function Acc-> IO Int32

-- [...]

-- Line 31 follows
mSum :: CodeGenModule (Function Sig)
mSum = createNamedFunction ExternalLinkage "sum" $ \l ptr_x fn ->  do
    r <- forLoop (valueOf 0) l (valueOf (0::Int32)) $ \i sum -> do
      xi <- getIndex ptr_x i
      x <- load xi
      call fn sum x
    ret r 
Run Code Online (Sandbox Code Playgroud)

注释 …

haskell llvm

4
推荐指数
1
解决办法
561
查看次数

使用动态函数更新多个集合的元素

设置:

我有几个各种数据结构的集合,代表虚拟系统中模拟对象的状态.我还有许多函数可以转换(即基于原始对象和0或更多参数创建对象的新副本)这些对象.

目标是允许用户选择一些对象来应用转换(在模拟规则内),将这些函数应用于这些对象,并通过用新的对象替换旧对象来更新集合.

我希望能够通过将较小的变换组合成较大的变换来构建这种类型的函数.然后评估这个组合功能.

问题:

如何构建我的程序以使其成为可能?

我用什么样的组合来建立像这样的交易?

想法:

  1. 将所有集合放入一个巨大的结构中并传递这个结构.
  2. 使用状态monad来完成基本相同的事情
  3. 使用IORef(或其中一个更强大的表兄弟,如MVar)并构建一个IO动作
  4. 使用功能反应式编程框架

1和2看起来像是带着很多行李,特别是如果我想最终将一些集合移动到数据库中.(Darn IO Monad)

3似乎运作良好但开始看起来很像重新创建OOP.我也不确定在什么级别使用IORef.(例如IORef (Collection Obj)Collection (IORef Obj)data Obj {field::IORef(Type)} )

4感觉功能最强大,但它似乎也创造了很多代码复杂性而在表现力方面没有太大的回报.


我有一个网店前面.我维护了一系列产品,其中包括库存数量和价格(等等).我还有一些对商店有信用的用户.

用户出现并选择3个产品购买并使用商店信用结账.我需要创建一个新产品集合,其中有3个产品的库存量减少,创建一个新的用户集合,用户帐户借记.

这意味着我得到以下内容:

checkout :: Cart -> ProductsCol -> UserCol -> (ProductsCol, UserCol)
Run Code Online (Sandbox Code Playgroud)

但是生活变得更复杂,我需要处理税收:

checkout :: Cart -> ProductsCol -> UserCol -> TaxCol 
            -> (ProductsCol, UserCol, TaxCol)
Run Code Online (Sandbox Code Playgroud)

然后我需要确保将订单添加到发货队列:

checkout :: Cart 
         -> ProductsCol 
         -> UserCol 
         -> TaxCol
         -> ShipList
         -> (ProductsCol, UserCol, TaxCol, ShipList)
Run Code Online (Sandbox Code Playgroud)

等等...

我想写的是类似的东西

checkout …
Run Code Online (Sandbox Code Playgroud)

haskell data-modeling ioref

4
推荐指数
1
解决办法
124
查看次数

使用或滥用Error Monad Transformer

背景

我正在使用由一堆变压器构建的monad,其中一个是ErrorT.因此我的monad实现了MonadError类,并且throwError是一个有效的语句.我只想在满足某个条件时抛出错误.我倾向于做以下事情:

if badCondition
  then throwError "You did a bad, bad thing..."
  else return ()
doGoodThings
[...]
Run Code Online (Sandbox Code Playgroud)

在看这个时,我想我甚至可以将它概括为以下内容:

throwErrorWhen :: (MonadError e m) => Bool -> e -> m ()
throeErrorWhen cond err = if cond then throwError e else return ()
Run Code Online (Sandbox Code Playgroud)

事实上,这似乎很明显,我很惊讶它不是MonadError库.

问题:

是否有更好/更正确的方法来提出错误只是满足某些条件?

styles haskell

4
推荐指数
1
解决办法
193
查看次数

编写binop以使用int和float

我有一个我正在研究的解析器.没有进入所有细节,我想要一个将添加两个数值的函数:

add [VFloat a, VFloat b] = return $ VFloat (a + b)
add [VInt   a, VFloat b] = return $ VFloat (fromInteger a + b)
add [VFloat a, VInt   b] = return $ VFloat (a + fromInteger b)
add [VInt   a, VInt   b] = return $ VInt   (a + b)
add [_,_] = throwError "Currently only adding numbers"
add _ = throwError "Arity Error: Add takes 2 arguments"
Run Code Online (Sandbox Code Playgroud)

很酷,很棒.现在,我想同样的功能-,*,/,<,>, …

haskell typechecking

4
推荐指数
1
解决办法
194
查看次数

使haskell平台更新需要哪些步骤?

我刚安装了haskell-platform我的系统(Ubunto 12.04,如果重要的话).我发现cabal仍然是版本1.14.0.0,这导致了问题.我也有一些regex-base当前但是针对古老版本的MTL库编译的软件包(即).解决依赖关系的问题.

有人可以帮助我完成所需的步骤,以使haskell平台的所有部分都是最新的.

haskell cabal haskell-platform

4
推荐指数
1
解决办法
215
查看次数

使用makeClassy使用相同的字段名称制作镜头(TH)

这个问题是关于Edward A. Kmett的镜头包(版本4.13)

我有许多不同的data类型,所有类型都有一个字段,表示包含的最大元素数(业务规则受运行时更改,而不是集合实现问题.)我想capacity在所有情况下调用此字段,但我很快遇到命名空间冲突.

我在lens文档中看到有一个makeClassy模板,但我无法找到我理解的文档.这个模板功能是否允许我有多个具有相同字段名称的镜头?


EDITED:让我补充一点,我完全能够编码的周围的问题.我想知道是否makeClassy解决问题.

haskell template-haskell haskell-lens

4
推荐指数
1
解决办法
627
查看次数