私が次のものを持っているとしましょう:
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
です。