Send Beginners mailing list submissions to beginners@haskell.org To subscribe or unsubscribe via the World Wide Web, visit http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners or, via email, send a message with subject or body 'help' to beginners-requ...@haskell.org
You can reach the person managing the list at beginners-ow...@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: How to "cast" FromJSON instance value (Jan von Löwenstein) 2. Re: How to "cast" FromJSON instance value (Baa) ---------------------------------------------------------------------- Message: 1 Date: Tue, 01 Aug 2017 11:30:43 +0000 From: Jan von Löwenstein <jan.loewenst...@gmail.com> To: The Haskell-Beginners Mailing List - Discussion of primarily beginner-level topics related to Haskell <beginners@haskell.org> Subject: Re: [Haskell-beginners] How to "cast" FromJSON instance value Message-ID: <CAJtP4w47=-3wbebxgexnu721kknsbuhl8s5+s7u46mnbrqi...@mail.gmail.com> Content-Type: text/plain; charset="utf-8" You'd still have to handle the case that the Value is not what you expected. Otherwise you'll have a partial function (i.e. error in case of certain inputs). So maybe you'd best use aeson directly (which spares you the GetValue instances as well). getValue :: (FromJSON a) => Text -> Map Text a -> Maybe a Best Jan P.S. There is no such thing as a stupid question. Baa <aqua...@gmail.com> schrieb am Di., 1. Aug. 2017, 13:02: > Hello, Jan! I "remove" the question :) > Problem was: reading of HTML form values, which can be any type and > saving them in a map. I done it w/ `Map Text Value` (instead of previous > `Map Text Text`). To get values from the map, I implemented class and > several instances which returns values of different types, something > like: > > class GetValue a where > getValue :: Text -> Map Text Value -> a > > (promoting of `a` anywhere in the existing code needs big refactoring, > so map's value is `::Value` but not `::a`). Cons is a need to implement > N instances of `GetValue`: one per getting type. > > Anywhere, Jan, thanks for quick answer, I'm sorry for this stupid > question. > > > > Hi, > > > > You don't know anything about your a's but that they have FromJSON > > instances. That in turn means you can get values from aeson parsing > > functions. Think parseJSON :: Value -> Parser a > > Could you be more specific about the problem you try to solve? > > > > Best > > Jan > > > > Baa <aqua...@gmail.com> schrieb am Di., 1. Aug. 2017, 10:32: > > > > > Hello, List! > > > > > > I have, for example, function with signature like > > > > > > fn :: FromJSON a => Map Text a -> BlahBlah > > > > > > and I want to treat this `a` as String (or `Text`), to read it with > > > `readMaybe`. Am I right that it's impossible? I get error about > > > "...a is rigid type and could not be matched with Text...". But > > > `Text` is `FromJSON` instance. Is it possible to do it (cast, > > > convert, unwrap, etc)? > > > > > > The problem's source is that early I worked with `Text` values only > > > (getting from HTML form) but now they become any type: int's, > > > bool's, etc). > > > > > > === > > > Best regards, > > > Paul > > > _______________________________________________ > > > Beginners mailing list > > > Beginners@haskell.org > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > > _______________________________________________ > Beginners mailing list > Beginners@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/20170801/f90c4aa3/attachment-0001.html> ------------------------------ Message: 2 Date: Tue, 1 Aug 2017 14:47:00 +0300 From: Baa <aqua...@gmail.com> To: beginners@haskell.org Subject: Re: [Haskell-beginners] How to "cast" FromJSON instance value Message-ID: <20170801144700.17ddb015@Pavel> Content-Type: text/plain; charset=US-ASCII Ohh, pardon! Yes, signature was class GetValue a where getValue :: Text -> Map Text Value -> Maybe a with `Maybe` sure. But I didn't understand you: what do you mean "to use aeson directly"? Problem is to save `FromJSON a` instances in map but get from the map `Text`, `Bool` and etc values. Sure, it possible to parameterize all related functions/types with `FromJSON a => .. a` but in this case I hit 2 problems: 1. rigid type error when I have `FromJSON a =>` in some signature and try to use this `a` as `Text` value, for example 2. big refactoring (many signatures, types) So, I decided to save in the map `Value`s instead of `FromJSON a`s. De-facto, this map is heterogenous and keeps values of different types. And question for me was: to hide this fact under `FromJSON` or under `Value`. I'm not sure what is the best solution and I don't know how to solve 1. > You'd still have to handle the case that the Value is not what you > expected. Otherwise you'll have a partial function (i.e. error in > case of certain inputs). > > So maybe you'd best use aeson directly (which spares you the GetValue > instances as well). > > getValue :: (FromJSON a) => Text -> Map Text a -> Maybe a > > Best > Jan > P.S. There is no such thing as a stupid question. > > Baa <aqua...@gmail.com> schrieb am Di., 1. Aug. 2017, 13:02: > > > Hello, Jan! I "remove" the question :) > > Problem was: reading of HTML form values, which can be any type and > > saving them in a map. I done it w/ `Map Text Value` (instead of > > previous `Map Text Text`). To get values from the map, I > > implemented class and several instances which returns values of > > different types, something like: > > > > class GetValue a where > > getValue :: Text -> Map Text Value -> a > > > > (promoting of `a` anywhere in the existing code needs big > > refactoring, so map's value is `::Value` but not `::a`). Cons is a > > need to implement N instances of `GetValue`: one per getting type. > > > > Anywhere, Jan, thanks for quick answer, I'm sorry for this stupid > > question. > > > > > > > Hi, > > > > > > You don't know anything about your a's but that they have FromJSON > > > instances. That in turn means you can get values from aeson > > > parsing functions. Think parseJSON :: Value -> Parser a > > > Could you be more specific about the problem you try to solve? > > > > > > Best > > > Jan > > > > > > Baa <aqua...@gmail.com> schrieb am Di., 1. Aug. 2017, 10:32: > > > > > > > Hello, List! > > > > > > > > I have, for example, function with signature like > > > > > > > > fn :: FromJSON a => Map Text a -> BlahBlah > > > > > > > > and I want to treat this `a` as String (or `Text`), to read it > > > > with `readMaybe`. Am I right that it's impossible? I get error > > > > about "...a is rigid type and could not be matched with > > > > Text...". But `Text` is `FromJSON` instance. Is it possible to > > > > do it (cast, convert, unwrap, etc)? > > > > > > > > The problem's source is that early I worked with `Text` values > > > > only (getting from HTML form) but now they become any type: > > > > int's, bool's, etc). > > > > > > > > === > > > > Best regards, > > > > Paul > > > > _______________________________________________ > > > > Beginners mailing list > > > > Beginners@haskell.org > > > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > > > > > > > _______________________________________________ > > Beginners mailing list > > Beginners@haskell.org > > http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners > > ------------------------------ Subject: Digest Footer _______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners ------------------------------ End of Beginners Digest, Vol 110, Issue 2 *****************************************