我有一个结构来定义延迟评估的序列,这些序列定义为
datatype 'a seq = Cons of 'a option * (unit -> 'a seq)
我有一个函数 map() 将类型 ('a->'b) 的函数映射到序列中的值。
val map : ('a -> 'b) -> 'a seq -> 'b seq
但是,当我定义函数时,它与签名提供的类型不匹配,而且我一生都无法弄清楚如何使其匹配。我尝试的一切要么没有影响它,要么让它变得更糟。
fun map fu (Cons(NONE, f)) = map fu (f())
| map fu (Cons(SOME x, f)) = Cons(fu(x), fn () => map(fu) (f()))
这给了我结构中的错误类型与签名不匹配
spec: ('a -> 'b) -> 'a ?.Seq.seq -> 'b ?.Seq.seq
actual: ('a -> 'b option) -> 'a ?.Seq.seq -> 'b ?.Seq.seq