<div dir="ltr">Sorry I really should've tested my code before I hit send.<div><br></div><div><div>instance FromJSON CUid where</div><div>  parseJSON (Number n) = do</div><div>    case floatingOrInteger n of</div><div>      Right i | inrange i -> return . CUid . fromIntegral $ i</div><div>      _ -> mempty</div><div><br></div><div>    where</div><div>      inrange :: Integer -> Bool</div><div>      inrange i = i >= fromIntegral (minBound @Word32) &&</div><div>                  i <= fromIntegral (maxBound @Word32)</div><div><br></div><div>  parseJSON _ = mempty</div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 9, 2018 at 1:06 PM, David McBride <span dir="ltr"><<a href="mailto:toad3k@gmail.com" target="_blank">toad3k@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">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.<div><br></div><div><div>instance FromJSON CUid where</div><div>  parseJSON (Number n) = do</div><div><br></div><div>    case floatingOrInteger n of</div><div>      Right i | inrange i -> return . CUid . fromIntegral $ i</div><div><br></div><div>     -- not an integer, or not in range</div><div>      _ -> mempty</div><div><br></div><div>    where</div><div>      inrange :: Integer -> Bool</div><div>      inrange i = fromIntegral i >= (minBound @Word32) &&</div><div>                    fromIntegral i <= (maxBound @Word32)</div><div><br></div><div>  -- not a number</div><div>  parseJSON _ = mempty</div></div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 9, 2018 at 11:37 AM, PICCA Frederic-Emmanuel <span dir="ltr"><<a href="mailto:frederic-emmanuel.picca@synchrotron-soleil.fr" target="_blank">frederic-emmanuel.picca@<wbr>synchrotron-soleil.fr</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, I try to write the instance for the CUid[1] type<br>
But I do not know what to do.<br>
<br>
instance FromJSON CUid where<br>
    parseJSON = ...<br>
    {-# INLINE parseJSON #-}<br>
<br>
Thansk for your help<br>
<br>
<br>
[1] <a href="https://hackage.haskell.org/package/base-4.11.1.0/docs/System-Posix-Types.html#t:CUid" rel="noreferrer" target="_blank">https://hackage.haskell.org/pa<wbr>ckage/base-4.11.1.0/docs/Syste<wbr>m-Posix-Types.html#t:CUid</a><br>
______________________________<wbr>_________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bi<wbr>n/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>