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
*****************************************

Reply via email to