小编J F*_*sch的帖子

Ping Pong与Haskell和Thrift陷入困境

我正在尝试使用Haskell和Thrift做一个简单的Ping Pong.但是,它只会重复一次,然后就会卡住.我假设问题出在正确使用Thrift而不是Haskell中.可能没有正确刷新的东西.是否有任何有Thrift经验的人可以帮助我做出有关如何解决这个问题的有根据的猜测?

服务器:

echorequest :: TXT
echorequest = TXT {
    f_TXT_anytxt = Just "Ping"
    }

echoreply :: TXT
echoreply = TXT {
    f_TXT_anytxt = Just "Pong"
    }

serverFunc :: a -> (BinaryProtocol Handle, BinaryProtocol Handle)
              -> IO Bool
serverFunc a (h1,h2) = do
  let t1 = getTransport h1
  dat <- read_TXT h1
-- the following two lines are only for debugging
  putStrLn "Recieved data:"
  print dat
  write_TXT h1 echoreply
  tFlush t1
-- the following line is for debugging
  putStrLn "Data …
Run Code Online (Sandbox Code Playgroud)

haskell thrift

27
推荐指数
1
解决办法
1253
查看次数

插入新绑定时是否复制了整个Map?

我想更好地理解例如Data.Map的实习生.当我在Map中插入一个新的绑定时,由于数据的不变性,我得到一个与旧数据结构加上新绑定相同的新数据结构.

我想了解这是如何实现的.编译器最终是通过使用数百万个绑定复制整个数据结构来实现的吗?通常可以说可变数据结构/数组(例如Data.Judy)或命令式编程语言在这种情况下表现更好吗?在字典/键值存储方面,不可变数据是否具有任何优势?

haskell

18
推荐指数
3
解决办法
599
查看次数

闭包(在Haskell中)

对我来说,Closure是一个(嵌套?)函数,具有共同定位的数据.

当您在Haskell中编写软件并在之后查看它时,您经常会发现无意中创建的闭包.

我不太适合自己.在什么情况下我会故意想要编码闭包?毕竟,在所有的例子中,我发现共同定位数据的数量是微不足道的,因此在我看来并不像在实践中那样可以证明他们(有意)的创造是合理的.是否有任何Haskell模块可以帮助我有意创建闭包并将其存储在地图中?

closures haskell

14
推荐指数
1
解决办法
6491
查看次数

绑定,绑定和单个赋值运算符(< - )之间的区别

我不明白这三种语法之间的区别:

  • where a = f (b)
  • do a <- f (b)
  • do let a = f (b)

我确实理解,虽然这a <- f(b)与其他两个不同,在大多数情况下,我尝试了所有三个工作.另外,我在网上的某个地方读到了每个块,你应该尝试与一个让绑定相处,只是为了"惯用".但我似乎永远不会管理.

我该如何决定使用什么?

haskell

14
推荐指数
1
解决办法
2076
查看次数

ARM Beagleboard上的Haskell

我想在Beagleboard上使用基于ARM OMAP 的Haskell GHC/Haskell平台.有没有办法在短期内做到这一点,但没有我必须首先交叉编译,例如LLVM,然后GHC等几周?

haskell beagleboard

13
推荐指数
1
解决办法
1796
查看次数

是否可以"隐藏"语言扩展?

我编写了一个模块,为了运行导入模块的主代码需要具有语言扩展名,{-# LANGUAGE OverloadedStrings #-}或者当编译程序时需要给出选项.

如果我{-# LANGUAGE OverloadedStrings #-}在模块中包含这是无法解决的,用户仍然需要在她的代码或编译时执行相同的操作.

有没有什么方法可以在实际模块中做"某事",以便从最终用户解决这个问题,所以说"隐藏"所需的语言扩展?

haskell

13
推荐指数
2
解决办法
312
查看次数

HaLVM和线程

我不太明白,例如HaLVM或类似技术在(OS)线程方面做了什么.

我理解在使用-threaded选项编译代码时,Haskell多线程RTS将使用OS线程重新分配现有的Haskell线程,从而避免阻止外部调用的行为.现在,当您使用HaLVM时,您可能不必进行任何外来呼叫.但是,我想知道这一切是如何混合的,以及HaLVM运行的工作线程数.是否没有其他情况下OS工作线程的缺失可能导致阻塞或其他不良行为?

haskell halvm unikernel

10
推荐指数
1
解决办法
620
查看次数

计数器每次都被初始化?

我试着做一个简单的计数器.然而,我的柜台并没有上升.在我看来好像每次都通过函数"inc"重新初始化,或者(n + 1)不起作用.我该如何最好地解决这个问题?

inc :: Int -> IO Int
inc n = return (n+1)

main :: IO ()
main = do
  let c = 0
  let f = 0
  putStrLn "Starting..."
  conn <- connect "192.168.35.62" 8081
  time $
    forM_ [0..10000] $ \i -> do
      p <- ping conn "ping"
      if p=="pong" then inc c
         else inc f
  printf "Roundtrips %d\n" (c::Int)
Run Code Online (Sandbox Code Playgroud)

haskell

7
推荐指数
3
解决办法
808
查看次数

标准库选取的命令行选项

我使用了库标准和cmdargs.

当我在没有cmdargs的情况下完全编译程序并运行它时,例如./prog --help然后我从标准中得到一些不需要的响应,关于可能的选项和运行次数等.

当我编译并运行它时,命令行选项首先被我的代码选中,然后按标准读取.Criterion然后报告并且错误告诉我选项--byte是未知的.我没有在标准文档中看到如何关闭或解决这个问题.有没有办法清除我读过它们的命令行选项?否则我需要使用例如CPUTime而不是标准,这对我来说是好的,因为我真的需要额外的功能和标准提供的数据.

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveDataTypeable #-}

import System.Console.CmdArgs

data Strlen = Strlen {byte :: Int} deriving (Data, Typeable, Show)

strlen = cmdArgsMode $ Strlen {byte = def} &= summary "MessagePack benchmark v0.04"

main = do
  n <- cmdArgsRun strlen
  let datastring = take (byte n) $ randomRs ('a','z') (mkStdGen 3)
  putStrLn "Starting..."
  conn <- connect "192.168.35.62" 8081
  defaultMain [bench "sendReceive" $ whnfIO (mywl conn datastring)] 
Run Code Online (Sandbox Code Playgroud)

haskell haskell-criterion

7
推荐指数
1
解决办法
362
查看次数

标准的能力

我在这里找到了一些使用标准的旧例子.看起来好像在2009年,它支持绘制图形的命令行选项.

现在,当我导入标准0.6时,将它包装在一个基本的应用程序中(以测试它)并说./application --help它只给出了很少的可用选项而且与绘图无关.在我看来,对于输出格式和功能而言,它在2009年拥有的功能比2012年更多?

似乎有一个标准到html创建基本的html报告,但没有任何接近例如png输出显示在上面的网站或标准源数据包的示例目录中.

我在哪里可以找到准确和最新的信息?

./application --help

Usage: application [OPTIONS] [BENCHMARKS]
  -h, -?       --help               print help, then exit
  -G           --no-gc              do not collect garbage between iterations
  -g           --gc                 collect garbage between iterations
  -I CI        --ci=CI              bootstrap confidence interval
  -l           --list               print only a list of benchmark names
  -o FILENAME  --output=FILENAME    report file to write to
  -q           --quiet              print less output
               --resamples=N        number of bootstrap resamples to perform
  -s N         --samples=N          number of samples to collect
  -t …
Run Code Online (Sandbox Code Playgroud)

haskell haskell-criterion

6
推荐指数
1
解决办法
886
查看次数