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