ReScript の無限リストの正しい型付けが見つからないようです。
私が最初に試した:
type rec stream<'a> = ('a, () => ('a, stream<'a>))
ReScript は型が周期的であると考えていたため、これは正しくありませんでした。だから代わりに私は試しました:
type rec stream<'a> = ('a, Lazy.t<() => ('a, stream<'a>)>)
それでも型エラーが発生しました。
最終的に、このコードを機能させようとしていますが、型シグネチャが無限であるため失敗します。
let rec from: (int, Lazy.t<() => (int, Lazy.t<...>) = (x: int) => {
(x, () => Lazy.from_fun(from(x+1)))
}