<p dir="ltr">Hi, </p>
<p dir="ltr">getValue :: (FromJSON a) => Text -> Map Text a -> Maybe a<br>
getValue key map = (fromResult.fromJSON) $ lookup key map</p>
<p dir="ltr">fromResult (Success a) = Just a<br>
fromResult (Error _) = Nothing</p>
<p dir="ltr">I am not at a computer so I wouldn't be surprised if this doesn't compile. But you should see the picture. </p>
<p dir="ltr">Best <br>
Jan </p>
<br><div class="gmail_quote"><div dir="ltr">Baa <<a href="mailto:aquagnu@gmail.com">aquagnu@gmail.com</a>> schrieb am Di., 1. Aug. 2017, 13:48:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ohh, pardon! Yes, signature was<br>
<br>
  class GetValue a where<br>
    getValue :: Text -> Map Text Value -> Maybe a<br>
<br>
with `Maybe` sure. But I didn't understand you: what do you mean "to<br>
use aeson directly"? Problem is to save `FromJSON a` instances in map<br>
but get from the map `Text`, `Bool` and etc values. Sure, it possible<br>
to parameterize all related functions/types with `FromJSON a => .. a`<br>
but in this case I hit 2 problems:<br>
<br>
1. rigid type error when I have `FromJSON a =>` in some signature and<br>
   try to use this `a` as `Text` value, for example<br>
2. big refactoring (many signatures, types)<br>
<br>
So, I decided to save in the map `Value`s instead of `FromJSON a`s.<br>
De-facto, this map is heterogenous and keeps values of different types.<br>
And question for me was: to hide this fact under `FromJSON` or under<br>
`Value`. I'm not sure what is the best solution and I don't know how to<br>
solve 1.<br>
<br>
<br>
> You'd still have to handle the case that the Value is not what you<br>
> expected. Otherwise you'll have a partial function (i.e. error in<br>
> case of certain inputs).<br>
><br>
> So maybe you'd best use aeson directly (which spares you the GetValue<br>
> instances as well).<br>
><br>
> getValue :: (FromJSON a) => Text -> Map Text a -> Maybe a<br>
><br>
> Best<br>
> Jan<br>
> P.S. There is no such thing as a stupid question.<br>
><br>
> Baa <<a href="mailto:aquagnu@gmail.com" target="_blank">aquagnu@gmail.com</a>> schrieb am Di., 1. Aug. 2017, 13:02:<br>
><br>
> > Hello, Jan! I "remove" the question :)<br>
> > Problem was: reading of HTML form values, which can be any type and<br>
> > saving them in a map. I done it w/ `Map Text Value` (instead of<br>
> > previous `Map Text Text`). To get values from the map, I<br>
> > implemented class and several instances which returns values of<br>
> > different types, something like:<br>
> ><br>
> >   class GetValue a where<br>
> >     getValue :: Text -> Map Text Value -> a<br>
> ><br>
> > (promoting of `a` anywhere in the existing code needs big<br>
> > refactoring, so map's value is `::Value` but not `::a`). Cons is a<br>
> > need to implement N instances of `GetValue`: one per getting type.<br>
> ><br>
> > Anywhere, Jan, thanks for quick answer, I'm sorry for this stupid<br>
> > question.<br>
> ><br>
> ><br>
> > > Hi,<br>
> > ><br>
> > > You don't know anything about your a's but that they have FromJSON<br>
> > > instances. That in turn means you can get values from aeson<br>
> > > parsing functions. Think parseJSON :: Value -> Parser a<br>
> > > Could you be more specific about the problem you try to solve?<br>
> > ><br>
> > > Best<br>
> > > Jan<br>
> > ><br>
> > > Baa <<a href="mailto:aquagnu@gmail.com" target="_blank">aquagnu@gmail.com</a>> schrieb am Di., 1. Aug. 2017, 10:32:<br>
> > ><br>
> > > > Hello, List!<br>
> > > ><br>
> > > > I have, for example, function with signature like<br>
> > > ><br>
> > > >   fn :: FromJSON a => Map Text a -> BlahBlah<br>
> > > ><br>
> > > > and I want to treat this `a` as String (or `Text`), to read it<br>
> > > > with `readMaybe`. Am I right that it's impossible? I get error<br>
> > > > about "...a is rigid type and could not be matched with<br>
> > > > Text...". But `Text` is `FromJSON` instance. Is it possible to<br>
> > > > do it (cast, convert, unwrap, etc)?<br>
> > > ><br>
> > > > The problem's source is that early I worked with `Text` values<br>
> > > > only (getting from HTML form) but now they become any type:<br>
> > > > int's, bool's, etc).<br>
> > > ><br>
> > > > ===<br>
> > > > Best regards,<br>
> > > >   Paul<br>
> > > > _______________________________________________<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-bin/mailman/listinfo/beginners</a><br>
> > > ><br>
> ><br>
> > _______________________________________________<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-bin/mailman/listinfo/beginners</a><br>
> ><br>
<br>
_______________________________________________<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-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>