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
_______________________________________________