У меня есть две функции, определенные в куске кода haskell:
lengthwtilde [] = 0
lengthwtilde ~(_:xs) = 1 + lengthwtilde xs
lengthwotilde [] = 0
lengthwotilde (_:xs) = 1 + lengthwotilde xs
Когда я тестирую их оба в ghci (используя :set +s), я обнаружил, что lengthwtilde (тот, у которого тильда перед совпадением шаблона) выполняет значительно медленнее, чем lengthwotilde примерно на три секунды.
*Main> lengthwtilde [1..10000000]
10000000
(19.40 secs, 1731107132 bytes)
*Main> lengthwotilde [1..10000000]
10000000
(16.45 secs, 1531241716 bytes)
Почему это?