我对Haskell编程很感兴趣,但我想创建一个作业池系统,我想知道这是否会成为Haskell的一个问题。
下面是Ruby中的一个简单程序。在执行的一个线程上,从用户那里获取单词并添加到列表中。在另一个线程上,单词从列表中取出并以某种方式处理(在这种情况下,反转并打印给用户)。
words = []
# Create new thread to take words from array, one at a time, and process them
t = Thread.new {
loop do
unless words.empty?
word = words.p
我现在在学Haskell。现在我在函数式编程方面还没那么好。我想做一段代码,通过订阅Redis中的主题获得数据,对其做一些计算,并将其发布到其他主题上。我觉得有些语言特性有问题。
我现在的代码是:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Database.Redis
import System.IO
main = do
conn <- connect defaultConnectInfo
runRedis conn $ do
pubSub (subscribe ["
我有以下代码,并被要求打印多少次"A“、"B”、"C“、"D”、"E“
fun() {
printf("A");
fork();
printf("B");
if (fork() != 0) {
printf("C");
fork();
printf("D");
}
printf("E");
}
所以它应该是:
A
A
B
E
我不确定我上面的答案是否正确?那么if(fork() !=0 )这行代码做了什么呢?
我有一个相对简单的Haskell守护进程,它将来自Redis的内容写入一个线程中的通道,然后从通道中读取它们并将它们打印到另一个线程中的blpop。
在运行它时,它开始运行得很好,然后一段时间后,我在stderr上得到了以下内容
hogstash: getAddrInfo: does not exist (nodename nor servname provided, or not known)
并在我的system.log (OSX)中查看以下内容:
hogstash[11281]: dnssd_clientstub deliver_request: socketpair failed 24
我有一个类型来表示haskell类型:
data Type
= TApp Type Type
| TVar Name
| TLit Name
infixl 8 `TApp`
-- a -> b
aToB = TLit "Fun" `TApp` TVar "a" `TApp` TVar "b"
-- Maybe (IO Int)
maybeIOInt = TLit "Maybe" `TApp` (TLit "IO" `TApp` TLit "Int")
我想像has
我想同时在Haskell中打印来自控制台上两个不同函数的实时输出。
有可能吗?
你可以用这个代码..。
import Control.Parallel
main = a `par` b `par` c `pseq` print (a + b + c)
where
a = ack 3 10
b = fac 42
c = fib 34
fac 0 = 1
fac n = n * fac (n-1)
ack 0 n = n+1
ack m 0 = ack (
我是Haskell的初学者,我正在编写一些使用进行错误处理的Haskell代码。“选项”的左元素表示错误,而右侧元素表示成功的结果。代码通常使用任何一个的应用实例,这似乎是为这个用例设计的。
给定[Either e r]类型的对象,将其转换为Either e [r]类型对象的最优雅方法是什么?这样做的要点是,我们可能从调用的一些函数中得到一个返回值数组,如果这些返回值中有一个是错误,我们希望得到该错误并丢弃其他所有内容。如果数组的多个元素有错误,如果可能的话,我更希望得到最左边的错误。
通过编写两个函数(其中一个是递归函数),我可以自己在下面的代码中解决这个问题,但是有更好的方法吗?
type
我是一个Haskell新手,我想做一些有副作用的事情,比如:
i = 3.0
main :: IO ()
main = let m = print i in putStrLn "Hello world"
然后,当i运行时,我可以知道main的值,但是I没有打印。我在!之前添加了m,但它也不起作用。我想知道如何破解这个,谢谢提前!
我想运行一个haskell代码,其中涉及网络的东西。
ghc firewall.hs
错误消息
firewall.hs:1:8:
Could not find module `Network.HTTP.Enumerator'
Use -v to see a list of the files searched for.
如果这个问题与此相关,谁能告诉我如何在haskell中安装模块吗?
背景
我正在Haskell中构建一个日志文件解析器。我正在用堆栈来构建它。运行stack build命令可以很好地工作,我的项目会编译。但是,运行stack test会产生以下错误:
parser-test: executable not found
我在错误消息上面看到了下面的警告,但我不知道如何避免它所引用的重定向。
Warning: output was redirected with -o, but no output will be generated because there is no Main module.
相关档案
我还没有编写任何测试,所以这个测试文件是由stack n
作为一名前C++程序员,Haskell线程的行为令人困惑。请参阅以下Haskell代码片段:
import Control.Concurrent
import Control.Concurrent.MVar
import Data.Functor.Compose
import System.Random
randomTill0 :: MVar () -> IO () -- Roll a die until 0 comes
randomTill0 mV = do
x <- randomRIO (0,65535) :: IO Int
if 0 == x
下面是在运行时抛出调度错误的Haskell/C FFI代码(GHC7.0.3,MacOS10.7,x86_64)。我搜索了错误的解释,但没有找到任何相关的东西。
C代码(mt.c):
#include <pthread.h>
#include <stdio.h>
typedef void(*FunctionPtr)(int);
/* This is our thread function. It is like main(), but for a thread*/
void *threadFunc(void *arg)
{
FunctionPtr fn;