小编Uli*_*ler的帖子

Haskell中的正则表达式和字符串库

我正在尝试通过使用它来编写附带的脚本等来将Haskell引入我的日常生活中.

readProcess获取外部命令的结果很方便,但我发现自己正在搜索处理String结果.我来自红宝石,其中正则表达是一流的,所以我习惯将它们作为工具.

我应该阅读哪些库来在haskell中进行字符串处理?搜索匹配的行,拉出字符串的匹配区域,等等?

regex string haskell

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

套接字错误:90:消息太长

我在以下场景中遇到IGMP套接字调用错误;

fd = socket(PF_INET,  SOCK_RAW, IPPROTO_IGMP) ;
setsockopt( fd, IPPROTO_IP, IP_HDRINCL, nval, sizeof(nval) );
/** Fill in the IP header and Ethernet header**/
/*** Fill, create the IGMP packet structures***/
if(sendto( fd, &buf, sizeof(buf), 0,(struct sockaddr *) &addr, sizeof(addr)) < 0) {
    printf("Socket Sendto error %d : %s\n", errno, strerror(errno));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

sendto调用失败说消息太长.我使用8192作为缓冲区大小.所以我尝试使用以下调用来修复此错误;

if(setsockopt(dlpifd, IPPROTO_IP, SO_SNDBUF, &val, sizeof(int)) < 0) {
   printf("Can't set socket options:%d:%s\n", errno, strerror(errno));
   return 0;`
}
Run Code Online (Sandbox Code Playgroud)

setsockopt()调用成功,但sendto()的错误相同;

所以我用getsockopt()调用检查SO_SNDBUF大小,它显示1个字节?

我在做什么是错的.

Linux内核是否需要重新编译才能获得IGMP支持?或者我错过了什么?

c sockets network-programming igmp linux-kernel

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

如何将MonadThrow实例添加到Warp服务器中的ResourceT Monad Transformer

我正在尝试使用Warp构建一个简单的反向代理服务器(主要用于我自己的启发,因为有很多其他现成的选项).

到目前为止,我的代码主要取自Warp文档(将输出写入文件只是一个临时测试,再次从文档中解除):

import Network.Wai as W
import Network.Wai.Handler.Warp
import Network.HTTP.Types
import Network.HTTP.Conduit as H
import qualified Data.Conduit as C
import Data.Conduit.Binary (sinkFile)
import Blaze.ByteString.Builder.ByteString
import Control.Monad.Trans.Resource
import Control.Monad.IO.Class

proxApp req = do
    let hd = headerAccept "Some header"
    {-liftIO $ logReq req-}
    pRequest <- parseUrl "http://some_website.com"
    H.withManager $ \manager -> do
        Response _ _ _ src <- http pRequest manager
        src C.$$ sinkFile "test.html"
    return $ ResponseBuilder status200 [hd] $ fromByteString "OK\n"

main = do
    putStrLn "Setting up reverse proxy …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-warp

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

从haskeline中调用网络IO

我有一个现有的程序,它接受命令行参数(用户名,密码,日期),然后使用该Network.HTTP.Conduit库将xml消息发布到服务器.然后我解析结果,做一些工作并使用blaze-html写出文件.

这一切都像一个魅力; 但是,我以为我会使用haskeline密码不可见.我能够创建一个命令行程序来获取用户提供的值并打印出来,但是如果我调用使用管道的函数,它就永远不会返回.

这是违规代码:

main = runInputT defaultSettings loop
where 
    loop :: InputT IO ()
    loop = do
        Just username <- getInputLine "WM username: "
        Just password <- getPassword (Just '*') "WM password: "
        Just date     <- getInputLine "Date (YYYYMMDD): "

        outputStrLn "querying WM..."
        clients <- lift $ getWMClients username password
        outputStrLn "successfully retrieved client list from WM..."

        let outHeader = renderHeader date username

        reportString <- mapM  (\x -> createString x clients)  cList

        lift $ writeFile …
Run Code Online (Sandbox Code Playgroud)

haskell haskeline http-conduit

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

如何在不消耗的情况下使Attoparsec解析器成功(如parsec lookAhead)

我写了一个快速的attoparsec解析器来遍历一个aspx文件并删除所有的样式属性,它的工作正常,除了它的一部分,我无法弄清楚如何使它成功匹配>而不消耗它.

这就是我所拥有的:

anyTill = manyTill anyChar
anyBetween start end = start *> anyTill end

styleWithQuotes = anyBetween (stringCI "style=\"") (stringCI "\"")
styleWithoutQuotes = anyBetween (stringCI "style=") (stringCI " " <|> ">")
everythingButStyles = manyTill anyChar (styleWithQuotes <|> styleWithoutQuotes) <|> many1 anyChar
Run Code Online (Sandbox Code Playgroud)

我理解这部分是因为我在everythingButStyles中如何使用manyTill,这就是我如何积极地放弃所有样式的东西,但是styleWithoutQuotes我需要它来匹配">"作为结束,但不要消耗它,在parsec中我会做,lookAhead ">"但我不能在attoparsec做到这一点.

parsing haskell attoparsec

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

在Haskell中读取GraphML

我正在尝试将包含单个有向图的GraphML文件读入Haskell Data.Graph,以便使用该Math.Combinatorics.Graph模块运行分析.

但是,我找不到任何允许我读取GraphML文件的模块,生成一个Data.Graph.我找到的一个相关模块是ForSyDe.Backend.GraphML.然而,这似乎是特定于ForSyDeDSL的,我目前无法想到用它来阅读普通的方法Data.Graph.

你能指点我一个允许我阅读GraphML的库,最好是一些关于如何使用它的示例代码吗?

haskell graph graphml

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

来自单选按钮的AngularJS ng-model数据

我在AngularJS中有一个简短的表格.我ng-repeat用来显示性别并验证他们的单选按钮问题是我想要选择单选按钮的值并使用它打印出来ng-model.怎么能实现这个?

这里是普兰克

angularjs ng-repeat

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

当我们运行 julia-lang 脚本时会发生什么?

在我看来,julia 是一种带有 JIT 编译器的脚本语言。但是在java中,你可以找到*.class文件;在python中,你可以找到*.pyc文件。这意味着java和python需要首先将其语言转换为字节码,然后使用VM来运行这个字节码。但是,我找不到 julia 之类的字节码文件*.jlc。有任何想法吗?

jit bytecode julia

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

仅使用monadic绑定语法表示阻止

据我所知,doHaskell中的块只是monadic绑定运算符的某种语法糖.例如,一个人可以转换

main = do f <- readFile "foo.txt"
          print f
          print "Finished"
Run Code Online (Sandbox Code Playgroud)

main = readFile "foo.txt" >>= print >> print "Finished"
Run Code Online (Sandbox Code Playgroud)

是否可以将所有do块转换为绑定语法?例如,f多次使用此块的情况如何:

main = do f <- readFile "foo.txt"
          print $ "prefix " ++ f
          print $ f ++ " postfix"
Run Code Online (Sandbox Code Playgroud)

假设我们在IO monad中,则不可能简单地执行readFile两次计算.如何使用绑定语法表示此示例(如果可能的话)?

我认为使用Control.Monad不是解决方案,因为它在内部使用do块.

我认为可以使用箭头(使用&&&)表达这一点- 也许这只是一个箭头可以用作monads的推广的情况

请注意,这个问题不是关于上面的特殊示例,而是关于在monadic表达式中多次使用计算结果的一般情况print.

monads haskell scope do-notation

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

在 Ubuntu 上修复“找不到 crc32 工具”

我正在尝试在 Ubuntu 上构建spark/firmware,但是在运行时make我只收到以下错误消息

../build/common-tools.mk:26: *** "crc32 tool is not found".  Stop.
Run Code Online (Sandbox Code Playgroud)

我尝试使用

apt-get install crc32
Run Code Online (Sandbox Code Playgroud)

但没有这样的包。如何安装该crc32工具?

ubuntu crc32 makefile

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