[Haskell-beginners] How to write the FromJSON instance for CUid

David McBride toad3k at gmail.com
Thu Aug 9 17:06:40 UTC 2018


You have to worry about json having a floating point number or an integer
that is too large to be represented in a Word32, although you could also
just let it overflow if you don't care too much.  There's probably an
easier way to do this, but this is what I came up with.

instance FromJSON CUid where
  parseJSON (Number n) = do

    case floatingOrInteger n of
      Right i | inrange i -> return . CUid . fromIntegral $ i

     -- not an integer, or not in range
      _ -> mempty

    where
      inrange :: Integer -> Bool
      inrange i = fromIntegral i >= (minBound @Word32) &&
                    fromIntegral i <= (maxBound @Word32)

  -- not a number
  parseJSON _ = mempty


On Thu, Aug 9, 2018 at 11:37 AM, PICCA Frederic-Emmanuel <
frederic-emmanuel.picca at synchrotron-soleil.fr> wrote:

> Hello, I try to write the instance for the CUid[1] type
> But I do not know what to do.
>
> instance FromJSON CUid where
>     parseJSON = ...
>     {-# INLINE parseJSON #-}
>
> Thansk for your help
>
>
> [1] https://hackage.haskell.org/package/base-4.11.1.0/docs/
> System-Posix-Types.html#t:CUid
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20180809/7200ab11/attachment.html>


More information about the Beginners mailing list