3

可以说我有以下内容:

f (a, b) = if a == 0 then (0, 0) else (a * b, a / b)

x1 = make_strict (0, undefined)
x2 = (0, undefined)

g f :: (b -> b) -> a -> a

如何定义make_strictg

g f x = ... f x ...
make_strict x = ...

以便:

g f x1 == undef
g f x2 == (0, 0)

基本上我想制作一个严格版本的一对,然后我可以将它传递给一个接受一对的函数,g如果需要的话可能通过一个包装器。这里的具体实现f只是一个例子,解决方案不应该依赖它。关键是我不能改变f,我只能改变g

4

1 回答 1

7

怎么样

makeStrict (a, b) = seq a (seq b (a, b))
于 2012-06-19T17:18:51.690 回答