Я смотрел на некоторый исходный код Haskell и наткнулся на совпадение с шаблоном !_
, код здесь: http://hackage.haskell.org/package/base-4.9.0.0/docs/src/GHC.List.html#unsafeTake
take n xs | 0 < n = unsafeTake n xs
| otherwise = []
-- A version of take that takes the whole list if it given an argument less
-- than 1.
{-# NOINLINE [1] unsafeTake #-}
unsafeTake :: Int -> [a] -> [a]
unsafeTake !_ [] = []
unsafeTake 1 (x: _) = [x]
unsafeTake m (x:xs) = x : unsafeTake (m - 1) xs
Я действительно не понимаю, как работает "строгий шаблон" и почему он полезен для этой функции (или любой другой функции).