Null Pointer Pattern

David Feuer david.feuer at gmail.com
Mon Aug 17 14:52:03 UTC 2020


In the context of GHC Haskell, that's definitely the Right Thing. I think
what might concern some people is that pattern synonyms as we know them are
a very GHC thing, while the Ptr business is pretty much Report Haskell.

On Mon, Aug 17, 2020, 10:44 AM Andrew Martin <andrew.thaddeus at gmail.com>
wrote:

> 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
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20200817/a4d62fd8/attachment.html>


More information about the Libraries mailing list