Foreign.Ptr provides nullPtr. It would make some of my code more terse if this was additionally provided as a pattern synonym. The pattern synonym can be defined as:

    {-# language ViewPatterns #-}
    {-# language PatternSynonyms #-}
    module NullPointerPattern
      ( pattern Null
      ) where
    import Foreign.Ptr (Ptr,nullPtr)
    pattern Null :: Ptr a
    pattern Null <- ((\x -> x == nullPtr) -> True)
      where Null = nullPtr

Any here is example of code that becomes more terse once this is available:

    foo :: IO (Either Error (Ptr Foo))
    foo = do
      p <- initialize mySettings
      if p == nullPtr
        then pure (Left InitializeFailure)
        else pure (Right p)

With the pattern synonym, we are able to take advantage of LambdaCase:

    foo :: IO (Either Error (Ptr Foo))
    foo = initialize mySettings >>= \case
      Null -> pure (Left InitializeFailure)
      p -> pure (Right p)

I'm curious what others think.

--
-Andrew Thaddeus Martin