首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell中的并发(或并行)实体(或类似于对象的实体)

Haskell中的并发(或并行)实体(或类似于对象的实体)
EN

Stack Overflow用户
提问于 2014-02-07 12:51:59
回答 3查看 151关注 0票数 1

我想在哈斯克尔建立一个生物系统模型。我想这样做如下。

  • 每个单元格都是一个实体;就像面向对象编程中的一个对象。该实体可以读取全局变量并更新它们。每个实体可以有多个函数。当某些全局变量达到一定值时,每个函数都会计算某些值。根据计算结果,每个函数都会更新一些全局变量。类似于硬件描述语言,如VHDL、Bluespec和Verilog。

在Haskell中,推荐的方法是什么。我很了解基本的Haskell。我对Monad和Arrow也很满意。当我阅读反应性香蕉库时,我能掌握很多东西。

EN

回答 3

Stack Overflow用户

发布于 2014-02-07 13:10:20

你所描述的东西似乎是演员模型。这是Erlang编程语言的基本原理,但是Haskell没有内置的演员原语。快速检查给hactorssimple-actors,但我不能详细说明细节。

票数 2
EN

Stack Overflow用户

发布于 2014-02-07 17:02:58

如果你想要在哈斯克尔的演员系统,我强烈建议看看云哈斯克尔。它基于Erlang/OTP (提供相同的消息传递、并发语义和故障处理)。

不过,请注意:我是维护者。;)

https://github.com/haskell-distributed http://haskell-distributed.github.io

票数 1
EN

Stack Overflow用户

发布于 2014-02-08 01:13:33

这里的其他人都提到过演员,所以我想加入并提到pipes-concurrency,这是一种非分布式的演员形式。

就像演员一样,你有一种方法可以spawn一个邮箱:

代码语言:javascript
复制
import Pipes
import Pipes.Concurrent
import qualified Pipes.Prelude

main = do
    (output, input) <- spawn Unbounded
    ...

..。向邮箱发送邮件:

代码语言:javascript
复制
    forkIO $ runEffect $ Pipes.Prelude.stdinLn >-> toOutput output

..。并从邮箱中读取邮件:

代码语言:javascript
复制
    runEffect $ runEffect $ fromInput input >-> Pipes.Prelude.stdoutLn

您甚至不必使用pipes接口。您可以使用send一次发送单个消息。

代码语言:javascript
复制
send :: Output a -> a -> STM Bool

..。并使用recv接收单个消息。

代码语言:javascript
复制
recv :: Input a -> STM (Maybe a)

它附带了一个解释如何使用库的扩展教程

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21628309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档