小编Dan*_*sky的帖子

rxjs超时到第一个值

所以我从这个问题中了解到这里我理解timeout操作符错误,如果一个observable在给定的时间窗口内没有发出任何值...我的问题是,这个时间窗口在每次发射后重置,这使得有必要如果您只对窗口内的第一个值发出感兴趣,请完成序列...

有没有一个很好的方法来"超时到第一"?除了.take(1).timeout(1000)

timeout sequence rxjs

9
推荐指数
2
解决办法
1370
查看次数

如何表示非空列表类型

我非常喜欢创建可以表示无效状态的数据结构,所以我想问一下如何在reasonml 中表示非空列表?

由于可以在列表上进行模式匹配[][head, ...rest]我认为表示非空列表很容易,但我还没有找到方法。

更新:多亏了下面有启发性的答案,我才能想出一些真正打动我的东西:

module List = {
  include List;
  type nonEmpty('a) = ::('a, list('a));
  let foldNonEmpty = (type a, fn, l: nonEmpty(a)) => switch(l) {
    | [head, ...tail] => fold_left(fn, head, tail)
  };
}

module Number = {
  let min = List.foldNonEmpty(Pervasives.min);
  let max = List.foldNonEmpty(Pervasives.max);
}

Number.min([]); // illegal :D
Number.min([1]); // legal
Run Code Online (Sandbox Code Playgroud)

不知道大家怎么看,我觉得挺好看的。谢谢!

ocaml list reason

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

GADT 上的模式匹配失败

我在 ReasonML 上玩了更多,发现type t以下示例中的模式匹配无法处理错误

错误:此模式匹配 t(float) 类型的值,但预期模式匹配 t(int) 类型的值 类型 float 与类型 int 不兼容

  type t('a) =
    | One: t(int)
    | Two: t(float);

  let x =
    fun
    | One => None
    | Two => None;
Run Code Online (Sandbox Code Playgroud)

现在在某种程度上,如果这是关于函数的返回类型,这对我来说是有意义的。

我找到了一个等价问题的答案(我认为)。对于第二部分,答案似乎是忽略构造函数的绑定类型。在 ReasonML 中是否可能相同?

Ps:请在术语上迂腐地纠正我,我还在学习什么是什么。

Pps:我知道我可以通过显式键入来解决原始问题,x但我真的很喜欢fun它的语法,因为它很有趣。

ocaml pattern-matching gadt reason

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

标签 统计

ocaml ×2

reason ×2

gadt ×1

list ×1

pattern-matching ×1

rxjs ×1

sequence ×1

timeout ×1