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) 你好 :) 我知道可以用 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 约定?