Missing space after tilde `~` [GHC27207]
The ~
character can be used for multiple purposes:
 For type equality in a function signature:
a ~ b
 As a binary operator:
(~) :: a > b > c
 For defining nonstrict fields in the presence of the
StrictData
extension:data Foo = MkFoo Int ~Char
 For making irrefutable pattern matches lazy again in the presence of the
Strict
extension:f ~x = 5
 As a lazy pattern to turn refutable patterns into irrefutable patterns:
case undefined of ~(a,b) > length [a,b]
If no space is placed between ~
and the expression that follows it, this is interpreted as the last bullet; in expression contexts, the lazy pattern is not allowed. The most likely case is that you wish to use ~
as a binary operator, in which case a space is needed following it.
Examples
Missing space after tilde `~`
There is no space after the tilde character ~
.
Error Message
MissingSpaceLazyPattern.hs:11:9: error:
Lazy pattern in expression context: ~1
Did you mean to add a space after the '~'?

11  f x = x ~1
 ^^
MissingSpaceLazyPattern.hs
Before
module MissingSpaceLazyPattern where
(~) :: Int > Int > Bool
(~) a b = a == b
infixl 5 ~
f :: Int > Bool
f x = x ~1
After
module MissingSpaceLazyPattern where
(~) :: Int > Int > Bool
(~) a b = a == b
infixl 5 ~
f :: Int > Bool
f x = x ~ 1