这不是已经提出的无数问题中的一个。
相反,这是一个关于答案本身的问题。截至目前,what is a monad in functional programming?查询的谷歌搜索结果约为269,000,000,这是一堆试图在这里和网络上进行解释的尝试,从墨西哥玉米煎饼到爱情事务,无所不包。似乎每一次“简单”回答的尝试都变成了一个迷宫,每一个类比都变得比下一个更加混乱。我可能是错的,但在我看来,这种现象是独当一面的。
很多人尝试过,很少有人成功。
“单曲”是什么让解释它们如此诱人却又如此难以捉摸?
我有这样的代码,要求用户在删除行时确认。
@Override
public void onRemoveRecordClick(RemoveRecordClickEvent event)
{
SC.confirm("Are you sure to delete ?", new BooleanCallback() {
public void execute(Boolean value) {
if (value != null && value) {
在Haskell中,函子类型函子的定义如下(例如,见哈斯克尔维基):
class Functor (f :: * -> *) where
fmap :: (a -> b) -> f a -> f b
据我所知(如果我错了请纠正我),这样的函子只能有一个用类型构造函数(如[]、Maybe等)构造的范畴作为目标范畴。另一方面,人们可能认为函子的任何范畴都是函子的目标,例如所有类型的范畴。例如,Int可以是函子目标类别中的对象,而不仅仅是Maybe Int或[Int]。
Haskell函子受到这种限制的动机是什么?
我对Akka非常陌生,在参考手册中找不到答案。
假设我们有分布在3台机器(A、B、C)的集群中的远程参与者,其中每台机器上有一个参与者,其他的有actorRef到另外两个机器,即:
Machine A:
A (real actor)
-> B (ref)
-> C (ref)
Machine B:
-> A (ref)
B (real actor)
-> C (ref)
Machine C:
-> A (ref)
-> B (ref)
C (real actor)
参与者A执行以下代码:
bRef ! msg1
bRef ! msg2
参与者B在消息处理
在C++11中,线程对象可以被移动。众所周知,我们创建的每个线程都拥有一个函子。显然,移动一个未执行其函子的线程是合理的。但是,移动一个正在调用或已经执行了一段时间的函数的线程又如何呢?
为了更进一步,如果我实现了一个线程包装类,如:
//noncopyable is a tag class of which copy constructor and copy assignment are deleted.
class Thread:noncopyable{
private:
using ThreadFunc = std::function<void()>;
boo
我们可以有两种类型的f, g :: * -> *,使它们不是单子,但它们的组成是。例如,对于任意固定的s
f a := s -> a
g a := (s, a)
g a不是monad (除非我们将s限制为单半群),但是f (g a)是状态monad s -> (s, a)。(与函子和应用函子不同,即使f和g都是monads,。)
函子和应用函子有类似的例子吗?也就是说,f和g的组合是函子(或应用函子),尽管
f和g中的一个不是(应用程序)函子,另一个是
它们都不是(应用)函子,
Haskell中有类似于以下类型类的东西吗?
class Mergeable (f :: Type -> Type -> Type) where
merge :: f a b -> f c d -> f (a, c) (Either b d)
特别是,假设在某些值和路由上有一个Site类型的索引:
data Site a r
我们希望“合并”两个站点,例如和都将其数据(值)保存在内存中,同时支持路由的或。
instance Mergeable Site where
merge site1 site2 = ...
还有另一种类型,称为RouteEncoder
我正在监视一个域名何时到期。我熟悉到期的域名流程:宽限期,赎回期,然后删除。
让我困惑的是,当我在任何用户信息系统数据库(NetworkSolution、ICANN等)中搜索这个特定领域时。结果是:
No match for "<domain name>" in the registrar database.
:NetworkSolutions:
以前的信息是直接从注册人或网络解决方案以外的域名注册员处获得的。因此,网络解决方案不能保证其准确性或完整性。
显示此记录的基础注册表数据。
最后一行是指向注册表中一些简短信息的链接。最显著的信息是用户信息系统服务器
在有状态计算中,我会使用相同的镜头作为设置器和getter。GHC似乎无法推导出函子f的一般类型。
import Lens.Family
import Lens.Family.State
import Control.Monad.State
-- | Run computation inside modified state
with :: Functor f => LensLike' f s a -> a -> State s b -> State s b
with lens value comp = do
value' <- use le