There’s an interesting idea or two in here.  Like, should we support having non-nullable pointers?

On Mon, Aug 17, 2020 at 11:13 AM David Feuer <david.feuer@gmail.com> wrote:
GHC.Ptr feels like too low-level a zone for it. If the objections I predicted don't appear, Foreign.Ptr sure seems more logical.

On Mon, Aug 17, 2020, 11:07 AM Andrew Martin <andrew.thaddeus@gmail.com> wrote:
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@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@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@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries


--
-Andrew Thaddeus Martin
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries