小编jhi*_*ner的帖子

在OSX上设置套接字选项

我正在尝试在使用该Network.Socket模块构造的套接字上设置接收超时.这是一段代码片段:

import Network.Socket

host = "127.0.0.1"
port = PortNumber 3000

main = do
  addrinfos <- getAddrInfo Nothing (Just host) (Just port)
  let serveraddr = head addrinfos
  sock <- socket (addrFamily serveraddr) Stream defaultProtocol
  setSocketOption sock RecvTimeOut 120000000
  connect sock (addrAddress serveraddr)
  msg <- recv sock 1024
  putStrLn msg
  sClose sock
Run Code Online (Sandbox Code Playgroud)

setSocketOption行引发异常:

*** Exception: setSocketOption: invalid argument (Invalid argument)
Run Code Online (Sandbox Code Playgroud)

setSocketOption只接受Int设置的参数,但不是所有的套接字选项都需要Int.具体而言RecvTimeOut,SendTimeOut期待一个struct timeval.还有另一种方法可以从haskell设置这些选项吗?

我在OSX 10.8.1上运行GHC 7.4.2

编辑:

Network.Socket.Options …

sockets macos haskell

9
推荐指数
1
解决办法
1117
查看次数

GHCi对树莓派2?

我正在开发一些运行在raspberry pi 2上的haskell项目和ghc的版本,你可以用rasp-get(7.4.1)安装apt-get.它没有GHCi,这可以防止一些重要的包(如Vector)编译.我已经看到一些关于能够将更高版本的ghc(带有ghci)放到pi上的传言,但最近没有.haskell wiki上的条目看起来已经过时了几年.有人有运气吗?

haskell raspberry-pi2

8
推荐指数
1
解决办法
2764
查看次数

在clojure中锁定惯用文件?

我有一组来自队列的期货处理工作,涉及写入文件.什么是确保只有一个未来一次访问特定文件的惯用方法是什么?

clojure

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

INNER JOIN其中**每个**行必须与WHERE子句匹配?

这是我正在尝试做的简化示例.我有两张桌子,A和B.

A          B
-----      -----
id         id
name       a_id
           value
Run Code Online (Sandbox Code Playgroud)

我想只选择A中的行,其中B中行的所有值都与where子句匹配.就像是:

SELECT * from A INNER JOIN B on B.a_id = A.id WHERE B.value > 2
Run Code Online (Sandbox Code Playgroud)

上述查询的问题是,如果B中的任何行的值> 2,我将从A获得相应的行,而我只想要来自A的行

1.)ALL B中的行为B.a_id = A.id匹配WHERE,OR

2.)B中没有引用A的行

B基本上是一个过滤器表.

sql postgresql exists left-join

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

获得x,y点列表的边界

我有一个x,y点列表存储为矢量矢量,我想找出界限.

例如,鉴于此:

[[0 0] [20 30] [-50 -70] [200 300]]
Run Code Online (Sandbox Code Playgroud)

结果将是:

{:x -50, :y -70, :x2 200, :y2 300}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所拥有的.它给出了理想的结果,但看起来很冗长,而且对我来说并不是很好.

(defn get-stroke-bounds [vector-of-points]
  (reduce (fn [m [x y]]
        {:x  (min (:x  m Integer/MAX_VALUE) x)
         :y  (min (:y  m Integer/MAX_VALUE) y)
         :x2 (max (:x2 m Integer/MIN_VALUE) x)
         :y2 (max (:y2 m Integer/MIN_VALUE) y)})
      {}
      (vector-of-points)))
Run Code Online (Sandbox Code Playgroud)

关于如何改进它的任何想法?谢谢!

clojure

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

JSON编码包含MVar的记录

假设我有一个记录,其中一个值是一个MVar:

data SomeRecord = SomeRecord { frobs :: MVar Integer }
Run Code Online (Sandbox Code Playgroud)

我希望能够使用Aeson从JSON编码/解码它.在编码时,MVar将被解包并且原始值被编码,并且在解码时将发生相反的情况.

能够只写一个返回的IO (Maybe SomeRecord)FromJSON实例和一个返回的ToJSON实例会很好IO ByteString,但由于Parser monad不是MonadIO的实例,我认为不可能.

到目前为止,我已经尝试编写函数来在MVar-encumbered记录和几乎没有MVar类型的相同记录之间进行转换,然后对其进行编码/解码.

我试图找到一些方法来保持MVar首先脱离我的记录.这似乎是理想的.但是假设我出于某种原因无法做到这一点,是否有更简单的方法来处理JSON编码/解码?

编辑:

我想知道我是不是在问错误的问题.也许我的整个方法都不正确.我要做的是允许一堆连接的客户端(每个在不同的线程上)添加/编辑/删除对象列表.这是类型的样子:

-- the data type for each "room"
data Instance = Instance 
    { iName    :: T.Text
    , iObjects :: M.HashMap T.Text (MVar Store)
    ...
    }

-- the data type for a particular object in the room that can be changed
data Store = Store
    { sObject :: A.Value
    ...
    }
Run Code Online (Sandbox Code Playgroud)

每个"房间"都有一个Instance房间对象.实例本身位于MVar中以同步iObjects散列映射的添加/删除,并且每个单独的存储都在MVar中,以便在更新单个对象时不必阻止整个数据结构.

所以更新操作如下所示: …

haskell

0
推荐指数
1
解决办法
163
查看次数

标签 统计

haskell ×3

clojure ×2

exists ×1

left-join ×1

macos ×1

postgresql ×1

raspberry-pi2 ×1

sockets ×1

sql ×1