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_strictし、g

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 に答える