Что именно они делают? Я знаю одно возможное использование @(назначение имени в начале совпадения с шаблоном), но не удалось найти что-либо на ~.
Я нашел их в следующем фрагменте кода, взятом из http://www.haskell.org/haskellwiki/Prime_numbers, но в статье предполагается, что вы свободно владеете синтаксисом Haskell и не беспокоит объяснение своих эзотерических операторов (часть, с которой я запутался, является началом декларации для сита):
primesPT () = 2 : primes'
where
primes' = sieve [3,5..] primes' 9
sieve (p:xs) [email protected] ~(_:t) q
| p < q = p : sieve xs ps q
| True = sieve [x | x<-xs, rem x p /= 0] t (head t^2)
Любое объяснение (или ссылка на одно) о синтаксисе, используемом здесь, будет с благодарностью.