小编Mat*_*Wit的帖子

RxJS.Observable是monad吗?

Observable真的是monad吗?是否遵守Monad法律(https://wiki.haskell.org/Monad_laws)?在我看来似乎不喜欢它.但也许我的理解是错误的,有人可以对这个问题有所了解.我目前的推理是(我正在使用::来表示"善良"):

1)左侧身份: 返回>> =f≡fa

var func = x => Rx.Observable.of(10)

var a = Rx.Observable.of(1).flatMap(func) :: Observable
var b = func(1)                           :: ScalarObservable
Run Code Online (Sandbox Code Playgroud)

HASKELL:

func = (\_ -> putStrLn "B")

do { putStrLn "hello"; return "A" } >>= func   :: IO ()

func "A"                                       :: IO ()
Run Code Online (Sandbox Code Playgroud)

所以左侧身份不适用于Observable.可观察到的不是ScalarObservable.在Haskell中,类型是相同的 - IO().

2)右同一性: m >> =返回≡m

var x = Rx.Observable.of(1);

x.flatMap(x => Observable.of(x)) :: Observable
x                                :: ScalarObservable
Run Code Online (Sandbox Code Playgroud)

HASKELL:

Just 2 >>= return  :: Num b => Maybe …
Run Code Online (Sandbox Code Playgroud)

javascript haskell observable rxjs

15
推荐指数
1
解决办法
1148
查看次数

@abstract 类 - jsDoc

你好 :) 我知道可以用 jsDoc 做这样的事情:

/**
 * @class
 */
function Implementator() {
    if (this instanceof Implementator) {
        throw new Error('Abstract classes cannot be instantiated.');
    }
}



/**
 * @abstract
 */
Implementator.prototype.react = function() {
    throw new Error('Not implemented.');
};
Run Code Online (Sandbox Code Playgroud)

这里只有一个方法被标记为抽象实体。

但是我们可以像这样将@abstract 标记添加到Implementator 类(函数构造函数)本身:

/**
 * @class 
 * @abstract
 */
function Implementator() {
    if (this instanceof Implementator) {
        throw new Error('Abstract classes cannot be instantiated.');
    }
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,我知道这是可行的,事实上,jsDoc 文档生成器将(抽象)添加到类的名称中。但是可以在没有任何并发​​症的情况下添加吗?这样的符号是否仍然被视为遵守 jsDoc 约定?

javascript jsdoc

5
推荐指数
0
解决办法
1169
查看次数

标签 统计

javascript ×2

haskell ×1

jsdoc ×1

observable ×1

rxjs ×1