Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: flatten comma operator (Arlen Cuss)
2. Re: wrapping text in a multiline string (Rico Moorman)
3. Re: flatten comma operator (Kees Bleijenberg)
4. Re: wrapping text in a multiline string (Arlen Cuss)
5. Re: wxHaskell path (Miguel Negrao)
----------------------------------------------------------------------
Message: 1
Date: Wed, 6 Jun 2012 16:42:52 +1000
From: Arlen Cuss <[email protected]>
Subject: Re: [Haskell-beginners] flatten comma operator
To: Kees Bleijenberg <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"
By the way, is the excerpt from RWH involving liftA2 the chapter on using
Parsec? If so, this may be the code snippet you refer to:
-- file: ch16/FormApp.hs a_pair :: CharParser () (String, Maybe String) a_pair
= liftA2 (,) (many1 a_char) (optionMaybe (char '=' *> many a_char))
In this case, liftA2 is promoting the (,) operation to work with the two
operations in the CharParser applicative functor.
(,) is of type "a -> b -> (a,b)", so without lifting, we'd end up with
something like "(CharParser () String, CharParser () Maybe String)" (just a
guess here).
liftA2 produces a new applicative functor action which computes each of (many1
a_char) and (optionMaybe (char '=' *> many a_char)), then gives the pure
results to (,).
On Wednesday, 6 June 2012 at 4:36 PM, Arlen Cuss wrote:
> If (,) is a function that takes two elements and returns the 2-tuple, have
> you considered something like (,,)? :)
>
>
>
> On Wednesday, 6 June 2012 at 4:33 PM, Kees Bleijenberg wrote:
>
> > In 'Real World Haskell' I found code like LiftA2 (,) ....
> > Looks odd. But after some experimenting in winghci I found that (,) 1 2 is
> > valid code and is equal to (1,2).
> > Now I wonder how to create (1,2,3). I think you need a join or a flatten
> > function or ...? Join doesn't work?
> >
> > Kees
> >
> > _______________________________________________
> > Beginners mailing list
> > [email protected] (mailto:[email protected])
> > http://www.haskell.org/mailman/listinfo/beginners
>
------------------------------
Message: 2
Date: Wed, 6 Jun 2012 08:52:44 +0200
From: Rico Moorman <[email protected]>
Subject: Re: [Haskell-beginners] wrapping text in a multiline string
To: Arlen Cuss <[email protected]>
Cc: [email protected]
Message-ID:
<cajrzcx1qybl8pdqck1-bkf7by8ovewzkaxxfheghosbwrch...@mail.gmail.com>
Content-Type: text/plain; charset="windows-1252"
Thank you very much for this suggestion. I just tried the character class
you mentioned and it works.
The stackoverflow post you mentioned was a nice read and I surely agree
that regular expressions are normally not the way to go for most HTML
munging needs. But luckily the generated HTML from pandoc is very specific
and the <table> tag I wanted to match (for line-numbered code listings)
does not contain any further tables so I thought it should be safe to
approach it like this.
The resulting code is now:
-- Wraps numbered code listings within the page body with a div
-- in order to be able to apply some more specific styling.
wrapNumberedCodelistings (Page meta body) =
Page meta newBody
where
newBody = regexReplace
"<table\\s+class=\"sourceCode[^>]+>[\\s\\S]*?</table>" wrap body
wrap x = "<div class=\"sourceCodeWrap\">" ++ x ++ "</div>"
-- Replaces the whole match for the given regex using the given function
regexReplace :: String -> (String -> String) -> String -> String
regexReplace regex replace text = go text
where
go text = case text =~~ regex of
Just (before, match, after) ->
before ++ replace match ++ go after
_ -> text
Don't know though if it could be cleaned up further or even if this is by
any means good style (being still fairly new to haskell).
Furthermore I would still be very interested in the right approach to
manipulating the HTML structure as a whole and I too hope that another
Haskeller could name a more suitable solution for manipulating HTML.
Or even how to pass the 's' modifier to Text.Regex.PCRE.
Best regards,
rico
On Wed, Jun 6, 2012 at 7:11 AM, Arlen Cuss <[email protected]> wrote:
> I'd be more inclined to look at a solution involving manipulating the HTML
> structure, rather than trying a regexp-based approach, which will probably
> end up disappointing. (See this: http://stackoverflow.com/a/1732454/499609
> )
>
> I hope another Haskeller can speak to a library that would be good for
> this kind of purpose.
>
> To suit what you're doing now, though; if you change .*? to [\s\S]*?, it
> should work on multiline strings. If you can work out how to pass the 's'
> modifier to Text.Regexp.PCRE, that should also do it.
>
> ?Arlen
>
>
> On Wednesday, 6 June 2012 at 3:05 PM, Rico Moorman wrote:
>
> > Hello,
> >
> > I have a given piece of multiline HTML (which is generated using pandoc
> btw.) and I am trying to wrap certain elements (tags with a given class)
> with a <div>.
> >
> > I already took a look at the Text.Regex.PCRE module which seemed a
> reasonable choice because I am already familiar with similar regex
> implementations in other languages.
> >
> > I came up with the following function which takes a regex and replaces
> all matches within the given string using the provided function (which I
> would use to wrap the element)
> >
> > import Text.Regex.PCRE ((=~~))
> >
> > -- Replaces the whole match for the given regex using the given function
> > regexReplace :: String -> (String -> String) -> String -> String
> > regexReplace regex replace text = go text
> > where
> > go text = case text =~~ regex of
> > Just (before, match, after) ->
> > before ++ replace match ++ go after
> > _ -> text
> >
> > The problem with this function is, that it will not work on multiline
> strings. I would like to call it like this:
> >
> > newBody = regexReplace "<table class=\"sourceCode\".*?table>" wrap body
> > wrap x = "<div class=\"sourceCodeWrap\">" ++ x ++ "</div>"
> >
> > Is there any way to easily pass some kind of multiline modifier to the
> regex in question?
> >
> > Or is this approach completely off and would something else be more
> appropriate/haskelly for the problem at hand?
> >
> > Thank you very much in advance.
> > _______________________________________________
> > Beginners mailing list
> > [email protected] (mailto:[email protected])
> > http://www.haskell.org/mailman/listinfo/beginners
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.haskell.org/pipermail/beginners/attachments/20120606/48ba2c2d/attachment-0001.htm>
------------------------------
Message: 3
Date: Wed, 6 Jun 2012 09:46:58 +0200
From: "Kees Bleijenberg" <[email protected]>
Subject: Re: [Haskell-beginners] flatten comma operator
To: <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset="us-ascii"
This is indeed the code I was talking about.
I did not understand how I could create (1,2,3) with the comma operator
(,)((,) 1 2) 3 = ((1,2),3) and not (1,2,3). That's why I thought I needed a
kind of join operation to 'flatten' this.
Indeed (,,) 1 2 3 is (1,2,3). But I do not understand what is happening. Is
(,,) predefined? Probably not.
-----Oorspronkelijk bericht-----
Van: Arlen Cuss [mailto:[email protected]]
Verzonden: woensdag 6 juni 2012 8:43
Aan: Kees Bleijenberg
CC: [email protected]
Onderwerp: Re: [Haskell-beginners] flatten comma operator
By the way, is the excerpt from RWH involving liftA2 the chapter on using
Parsec? If so, this may be the code snippet you refer to:
-- file: ch16/FormApp.hs a_pair :: CharParser () (String, Maybe String)
a_pair = liftA2 (,) (many1 a_char) (optionMaybe (char '=' *> many a_char))
In this case, liftA2 is promoting the (,) operation to work with the two
operations in the CharParser applicative functor.
(,) is of type "a -> b -> (a,b)", so without lifting, we'd end up with
something like "(CharParser () String, CharParser () Maybe String)" (just a
guess here).
liftA2 produces a new applicative functor action which computes each of
(many1 a_char) and (optionMaybe (char '=' *> many a_char)), then gives the
pure results to (,).
On Wednesday, 6 June 2012 at 4:36 PM, Arlen Cuss wrote:
> If (,) is a function that takes two elements and returns the 2-tuple,
> have you considered something like (,,)? :)
>
>
>
> On Wednesday, 6 June 2012 at 4:33 PM, Kees Bleijenberg wrote:
>
> > In 'Real World Haskell' I found code like LiftA2 (,) ....
> > Looks odd. But after some experimenting in winghci I found that (,) 1 2
is valid code and is equal to (1,2).
> > Now I wonder how to create (1,2,3). I think you need a join or a flatten
function or ...? Join doesn't work?
> >
> > Kees
> >
> > _______________________________________________
> > Beginners mailing list
> > [email protected] (mailto:[email protected])
> > http://www.haskell.org/mailman/listinfo/beginners
>
------------------------------
Message: 4
Date: Wed, 6 Jun 2012 17:46:58 +1000
From: Arlen Cuss <[email protected]>
Subject: Re: [Haskell-beginners] wrapping text in a multiline string
To: Rico Moorman <[email protected]>
Cc: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"
Exploring the documentation for Text.Regex.PCRE, I've found "CompOption":
http://hackage.haskell.org/packages/archive/regex-pcre/0.94.4/doc/html/Text-Regex-PCRE-Wrap.html#t:CompOption
The constants are listed below; the one you want is probably compDotAll, to
make "." match newlines as well. I'm not 100% sure if this is the module you
want, though, and I can't seem to get regex-pcre installed, so I can't test.
Apologies!
On Wednesday, 6 June 2012 at 4:52 PM, Rico Moorman wrote:
> Thank you very much for this suggestion. I just tried the character class you
> mentioned and it works.
>
> The stackoverflow post you mentioned was a nice read and I surely agree that
> regular expressions are normally not the way to go for most HTML munging
> needs. But luckily the generated HTML from pandoc is very specific and the
> <table> tag I wanted to match (for line-numbered code listings) does not
> contain any further tables so I thought it should be safe to approach it like
> this.
>
> The resulting code is now:
>
> -- Wraps numbered code listings within the page body with a div
> -- in order to be able to apply some more specific styling.
> wrapNumberedCodelistings (Page meta body) =
> Page meta newBody
> where
> newBody = regexReplace "<table\\s+class=\"sourceCode[^>]+>[\\s\\S]*?</table>"
> wrap body
> wrap x = "<div class=\"sourceCodeWrap\">" ++ x ++ "</div>"
>
> -- Replaces the whole match for the given regex using the given function
> regexReplace :: String -> (String -> String) -> String -> String
> regexReplace regex replace text = go text
> where
> go text = case text =~~ regex of
> Just (before, match, after) ->
> before ++ replace match ++ go after
> _ -> text
>
>
> Don't know though if it could be cleaned up further or even if this is by any
> means good style (being still fairly new to haskell).
>
> Furthermore I would still be very interested in the right approach to
> manipulating the HTML structure as a whole and I too hope that another
> Haskeller could name a more suitable solution for manipulating HTML.
> Or even how to pass the 's' modifier to Text.Regex.PCRE.
>
> Best regards,
>
> rico
>
> On Wed, Jun 6, 2012 at 7:11 AM, Arlen Cuss <[email protected]
> (mailto:[email protected])> wrote:
> > I'd be more inclined to look at a solution involving manipulating the HTML
> > structure, rather than trying a regexp-based approach, which will probably
> > end up disappointing. (See this: http://stackoverflow.com/a/1732454/499609)
> >
> > I hope another Haskeller can speak to a library that would be good for this
> > kind of purpose.
> >
> > To suit what you're doing now, though; if you change .*? to [\s\S]*?, it
> > should work on multiline strings. If you can work out how to pass the 's'
> > modifier to Text.Regexp.PCRE, that should also do it.
> >
> > ?Arlen
> >
> >
> > On Wednesday, 6 June 2012 at 3:05 PM, Rico Moorman wrote:
> >
> > > Hello,
> > >
> > > I have a given piece of multiline HTML (which is generated using pandoc
> > > btw.) and I am trying to wrap certain elements (tags with a given class)
> > > with a <div>.
> > >
> > > I already took a look at the Text.Regex.PCRE module which seemed a
> > > reasonable choice because I am already familiar with similar regex
> > > implementations in other languages.
> > >
> > > I came up with the following function which takes a regex and replaces
> > > all matches within the given string using the provided function (which I
> > > would use to wrap the element)
> > >
> > > import Text.Regex.PCRE ((=~~))
> > >
> > > -- Replaces the whole match for the given regex using the given function
> > > regexReplace :: String -> (String -> String) -> String -> String
> > > regexReplace regex replace text = go text
> > > where
> > > go text = case text =~~ regex of
> > > Just (before, match, after) ->
> > > before ++ replace match ++ go after
> > > _ -> text
> > >
> > > The problem with this function is, that it will not work on multiline
> > > strings. I would like to call it like this:
> > >
> > > newBody = regexReplace "<table class=\"sourceCode\".*?table>" wrap body
> > > wrap x = "<div class=\"sourceCodeWrap\">" ++ x ++ "</div>"
> > >
> > > Is there any way to easily pass some kind of multiline modifier to the
> > > regex in question?
> > >
> > > Or is this approach completely off and would something else be more
> > > appropriate/haskelly for the problem at hand?
> > >
> > > Thank you very much in advance.
> > > _______________________________________________
> > > Beginners mailing list
> > > [email protected] (mailto:[email protected])
> > > (mailto:[email protected])
> > > http://www.haskell.org/mailman/listinfo/beginners
> >
>
------------------------------
Message: 5
Date: Wed, 6 Jun 2012 09:04:41 +0100
From: Miguel Negrao <[email protected]>
Subject: Re: [Haskell-beginners] wxHaskell path
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=windows-1252
A 06/06/2012, ?s 00:39, Henry Lockyer escreveu:
> Hi all
> Trying to work out how to get wxHaskell correctly installed on mac os x
> (10.6.8 snow leopard).
> Have decided to try and get the older version working (0.13) so as to use the
> pre-installed
> wxWidgets (2.8.8 it seems). I was looking at the wxHAskell install info for
> mac os x at
> (1) http://www.haskell.org/haskellwiki/WxHaskell/MacOS_X - which only
> talks about widgets 2.9,
> but I have now been reading
> (2) http://www.haskell.org/haskellwiki/WxHaskell/2.8
>
> Question:
> The variable "$wxwin" is referred to in the page at link (2) above, where it
> says:
> "We assume in this guide that the variable $wxwin points to your wxWidgets
> installation directory, for example: ~/dev/wxGTK-2.8.10."
> And in the page at link (1), step 3, it says:
> "Check your path to make sure you are using your wxWidgets and not the
> default Mac one"
>
> Are these referring to the same thing? ( I had originally interpreted 'path'
> as referring to $PATH.)
>
> The reference to $wxwin is in instructions for building wxWidgets 2.8 which I
> should not need to do if I am
> using the already installed 2.8.8 widgets library, but if I echo $wxwin it is
> blank and does not therefore appear to
> point to my wxWidgets installation directory.
> Is this an issue or is it only relevant to the initial build process for
> wxWidgets?
>
> Can anyone throw any light on this?
Not exactly what you are asking for but I recently installed wxHaskell latest
version with wxWidgets 2.9 on osx 10.7.3 successfully using the instructions
here http://www.haskell.org/haskellwiki/WxHaskell/MacOS_X and some help from
the list.
I installed wxWidgets from homebrew (http://mxcl.github.com/homebrew/) which
is very easy to do, a one liner. I think the 2.9 version is much better for
osx, it has 64 bit support and uses cocoa:
"2.9 series bring many improvements compared to 2.8 series such as much better
and simpler to use support for Unicode and the new wxOSX/Cocoa port, suitable
for development of 64 bit GUI applications under OS X, as well as a huge number
of other new features and bug fixes."
It should be something like:
brew install wxmac --devel
then
cabal install wx cabal-macosx
or if have issues with the command above install the correct versions of the
dependencies in the right order by hand:
cabal install wxdirect-0.90.0.1
cabal install wxc-0.90.0.3
cabal install wxcore-0.90.0.1
cabal install wx-0.90.0.1
cabal install cabal-macosx
When I did this I got it working inside EclipseFP although I couldn?t get ghc
to compile a hello world program, which I guess means I should be passing it
some flag that I don?t know about.
Hope this helps,
Miguel Negr?o
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 48, Issue 7
****************************************