[Haskell-beginners] Options for creating a multiple select form via Yesod

David McBride dmcbride at neondsl.com
Mon Jun 13 23:54:51 CEST 2011

The read function is sort of the opposite of the show function.  Take
a string, give me a value.  reads is like read, however it has some
traits that read doesn't have.

The problem with read is that if you go: read "asdf" :: Int, it will
die with an exception, and that is something you don't want in a web
app.  Also it doesn't tell you what the rest of the string is, so you
have no real way of finding out what was left of the string after the
part you wanted to parse.

So there is the reads function that returns [(a,String)] which is a
list of pairs of the answer a, and the rest of the string String.  As
a bonus, it returns a list so if it can't parse the string you pass
it, then it just returns an empty list.  Why didn't it use Maybe you
ask?  I bet it probably has to do with the function being one of the
first functions ever written for haskell, long before Maybe existed.

So all it is there is unpack this bytestring into a string, then parse
it into a value, and please don't blow up if the input is invalid.

On Mon, Jun 13, 2011 at 5:28 PM, Michael Litchard <michael at schmong.org> wrote:
> I was a bit hasty. I can render a multi-select field easily enough.
> However, I'm having difficulty following how selectField makes a value
> from the select field accessible from the handler code calling
> selectField. Once I figure that out, I can modify multiSelectField
> accordingly.
> The goal here being to modify selectField so that a list of field
> values can be bound .
> Here's what I have so far:
> multiSelectField is thus far identical in every way to selectField
> save for the following change in the Hamlet part.
> <select multiple="#{theId}" id="#{theId}" name="#{name}">
> My thinking was that the value bound to multiple was arbitary, and I'd
> use theId until I figured out something that made more sense.
> Here's where I am focusing my efforts next
> http://hpaste.org/47774
> Specifically
> (x', _):_ ->
>                            case lookup x' pairs' of
>                                Nothing -> FormFailure ["Invalid entry"]
>                                Just (y, _) -> FormSuccess y
> I'm thinking this is where selectField binds a value from the select
> field form. I'm confused by the (x',_):_. At first I thought it meant
> that just the first pair in a list of pairs is pattern matched
> against, and the rest discarded. But then I ask myself where the list
> is coming from. In a select field there would only be one pair, not a
> list of them. Here's where I get confused. Because if this is not
> where the values of the select field get bound, I don't know where
> it's happening.
> Is my confusion clear enough such that I could get some clarifying
> feedback? If not, what is unclear?
> On Sat, Jun 11, 2011 at 11:03 AM, Michael Snoyman <michael at snoyman.com> wrote:
>> The best way for code contributions in general is to submit a pull
>> request on Github. If that's a problem, sending a patch via email
>> works as well (either directly to me or to web-devel).
>> Michael
>> On Sat, Jun 11, 2011 at 1:14 AM, Michael Litchard <michael at schmong.org> wrote:
>>> Hey! I just added multiSelectField to the Forms library. I'm only
>>> getting the first value selected, but I think that's because of how
>>> I'm using multiSelecrField. I'm going to try to change the client code
>>> to fix this. I'll let you know how it goes. when I get a
>>> maybeMultiSelectField added I'll show you what I have. What would be
>>> the best way to submit this?
>>> On Thu, Jun 9, 2011 at 10:05 PM, Michael Snoyman <michael at snoyman.com> wrote:
>>>> Hi Michael,
>>>> There's nothing jQuery or Javascript specific about a multi-select
>>>> field: it's just a normal select field with a "multiple" attribute. I
>>>> would recommend taking the selectField code from yesod-form and
>>>> modifying it to be multi-select. I'll likely do this myself
>>>> eventually, but it could be a good learning experience in Yesod (and a
>>>> great introduction to contributing to the framework if you're so
>>>> inclined).
>>>> Michael
>>>> On Thu, Jun 9, 2011 at 8:29 PM, Michael Litchard <michael at schmong.org> wrote:
>>>>> I'm trying to create a multiple select form, as illustrated on the following:
>>>>> http://api.jquery.com/selected-selector/
>>>>> Here's the options I see possible:
>>>>> (1) Write a jQuery widget.
>>>>> (2) Use plain javascript via Julius
>>>>> (3) Use the low-level functions in Yesod.Form to write a widget
>>>>> (4) Use a pre-existing function that does what I need, but am not
>>>>> aware of this functionality
>>>>> (1) has appeal as it looks like something small I can contribute to
>>>>> the project. It will take me some extra time to figure out the
>>>>> details. But, I had a look at the other jQuery widgets and they seem
>>>>> to provide an approachable model to follow.
>>>>> (2) This looks like the most straight-forward approach. I'm just
>>>>> learning javascript so would have to figure out how to capture values
>>>>> in Haskell from the form.
>>>>> (3) This looks like the most difficult way. I don't think I know
>>>>> enough about the low-level functions in Yesod.Form to be able to
>>>>> accomplish this in a timely manner.
>>>>> (4) This is the best scenario. There's already a way to do this right
>>>>> now, and I just haven't identified it. If this is the case, I would
>>>>> appreciate being pointed in the right direction.
>>>>> Until informed otherwise, I'm evaluating options 1 and 2. All feedback
>>>>> welcomed. Thanks to all who made Yesod possible.
>>>>> _______________________________________________
>>>>> Beginners mailing list
>>>>> Beginners at haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/beginners
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners

More information about the Beginners mailing list