Null Pointer Pattern

Andrew Martin andrew.thaddeus at gmail.com
Mon Aug 17 15:07:37 UTC 2020


There is always the possibility of using GHC.Ptr as a home for it instead
of Foreign.Ptr. The main reason I would want this in base rather than just
some library is that, as a library author, I would never pick up an extra
dependency for something that trivial.

On Mon, Aug 17, 2020 at 10:52 AM David Feuer <david.feuer at gmail.com> wrote:

> 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
>>
>

-- 
-Andrew Thaddeus Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20200817/3353f44c/attachment.html>


More information about the Libraries mailing list