假设我有以下内容:
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_strict
和g
:
g f x = ... f x ...
make_strict x = ...
那样:
g f x1 == undef
g f x2 == (0, 0)
基本上我想制作一对的严格版本,然后我可以将其传递给一对函数,该函数需要一对,可能需要通过包装器g
。 f
的具体实现只是一个例子,解决方案不应该依赖它。关键是我无法更改f
,我只能更改g
。
答案 0 :(得分:7)
怎么样
makeStrict (a, b) = seq a (seq b (a, b))