
Hal Daume III
writes: f1 :: Int -> Int f1 x | trace ("The initial value is " ++ show x) False = undefined | otherwise = f2 x
In general, the 'trace ... False = undefined' thing is quite useful
How is it better than
f1 x = trace ("The initial value is " ++ show x) $ f2 x
It is much easier to use in real code. Consider f1 :: Foo -> Int f1 Alpha = 0 f1 (Beta i) = i f1 (Gamma x) = x*x f1 Delta = 4 f1 (Epsilon xs) = length xs Now which is easier: f1 :: Foo -> Int f1 Alpha = trace ("The initial value is " ++ show Alpha ) $ 0 f1 (Beta i) = trace ("The initial value is " ++ show (Beta i) ) $ i f1 (Gamma x) = trace ("The initial value is " ++ show (Gamma x) ) $ x*x f1 Delta = trace ("The initial value is " ++ show Delta ) $ 4 f1 (Epsilon xs) = trace ("The initial value is " ++ show (Epsilon xs)) $ length xs or f1 :: Foo -> Int f1 x | trace ("The initial value is " ++ show x) False = undefined f1 Alpha = 0 f1 (Beta i) = i f1 (Gamma x) = x*x f1 Delta = 4 f1 (Epsilon xs) = length xs ? --KW 8-)