Naopak, jde vidět, že ví, o čem mluví. Zatím jsi mimo spíš ty - minimálně co se Haskellu týče nás o tom přesvědčuješ celé vlákno.
Kecy v kleci.
Ne, chci vidět příklad kódu, který funguje korektně ve strict režimu a jeho vypnutím (tj. "s výchozím" lazy evaluation) přestane fungovat (obávám se, že to není možné). Zatím jsi ukázal kód, který 1) to měl obráceně 2) nebyl funkční.
https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-230003.1
A call to error terminates execution of the program and returns an appropriate error indication to the operating system.
Někomu se tu teď zhroutil svět 
Máte v tom zmatek hoši od Haskellu. Andy tvrdí, že error má nedefinované chování a může skončit v nekonečné smyčce. Ty tvrdíš, že nemůže. Reálně se navíc ten error dá chytit, takže to ve skutečnosti funguje ještě jinak. Ono je pak těžké něco dělat, když každý tvrdí něco jiného. Ale dobře, dejme tomu, že máš pravdu a error se chová definovaně. Tak tady máš ten kód, který funguje ve strict režimu a v lazy ne:
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Exception
myDiv :: Float -> Float -> IO Float
myDiv x 0 = error "Tímto číslem nelze dělit"
myDiv x y = return (x / y)
main = catch
(do
putStrLn "Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo"
input <- getLine
let n = (read input :: Float)
let a = myDiv 1 n
putStrLn "Tímto číslem lze dělit"
)
(\(err :: SomeException) -> putStrLn "Tímto číslem nelze dělit")
Strict:
ghc -O2 -XStrict test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
Tímto číslem nelze dělit
Lazy:
ghc -O2 test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
Tímto číslem lze dělit
Je mi jasné, že odchycení erroru bude podle vás taky nedefinované (težko říct, na co se vlastně člověk v Haskellu může spolehnout...), takže i verze bez něj, ať si ušetříme další kolečko, než si sami ujasníte, jak má co vlastně v Haskellu fungovat. Verze bez chytání erroru funguje taky, jen není tak elegantní:
{-# LANGUAGE ScopedTypeVariables #-}
import Control.Exception
myDiv :: Float -> Float -> IO Float
myDiv x 0 = error "Tímto číslem nelze dělit"
myDiv x y = return (x / y)
main = do
putStrLn "Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo"
input <- getLine
let n = (read input :: Float)
let a = myDiv 1 n
putStrLn "Tímto číslem lze dělit"
Strict:
ghc -O2 -XStrict test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
test: Tímto číslem nelze dělit
CallStack (from HasCallStack):
error, called at test.hs:6:13 in main:Main
Lazy:
ghc -O2 test.hs
./test
Tento program zjišťuje, zda lze zadaným číslem dělit. Zadejte číslo
0
Tímto číslem lze dělit