Подтвердить что ты не робот

Как я могу заставить GHC предупреждать о неполных привязках шаблонов в блоках do?

Следующая программа Haskell нарушена, поскольку она выполняет неполную привязку шаблона:

main = do
  [x] <- pure ["foo", "bar"]
  print x

Если вы скомпилируете его, вы не получите никаких предупреждений:

$ ghc -fwarn-incomplete-uni-patterns -o example example.hs
[1 of 1] Compiling Main             ( example.hs, example.o )
Linking example ...

но если вы запустите его, вы получите:

example: user error (Pattern match failure in do expression at example.hs:2:3-5)

Я хотел бы как-то получить предупреждение о компиляторе.

Из документации я бы подумал, что -fwarn-incomplete-uni-patterns сделает это, поскольку блок do выделяет следующие параметры:

desugared = pure ["foo", "bar"] >>= \[x] -> print x

И действительно, добавив, что в файл примера выдается предупреждение:

$ ghc -fwarn-incomplete-uni-patterns -o example example.hs
[1 of 1] Compiling Main             ( example.hs, example.o )

example.hs:1:37: Warning:
    Pattern match(es) are non-exhaustive
    In a lambda abstraction:
        Patterns not matched:
            []
            _ : (_ : _)

Как получить аналогичное предупреждение, когда я делаю то же самое внутри блока do?

$ ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.10.3
4b9b3361