[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