Send Beginners mailing list submissions to beginners@haskell.org 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 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: 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 <a...@unnali.com> Subject: Re: [Haskell-beginners] flatten comma operator To: Kees Bleijenberg <k.bleijenb...@inter.nl.net> Cc: beginners@haskell.org Message-ID: <bd4727d194e842a39621f06d81389...@unnali.com> 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 > > Beginners@haskell.org (mailto:Beginners@haskell.org) > > http://www.haskell.org/mailman/listinfo/beginners > ------------------------------ Message: 2 Date: Wed, 6 Jun 2012 08:52:44 +0200 From: Rico Moorman <rico.moor...@gmail.com> Subject: Re: [Haskell-beginners] wrapping text in a multiline string To: Arlen Cuss <a...@unnali.com> Cc: beginners@haskell.org 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 <a...@unnali.com> 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 > > Beginners@haskell.org (mailto:Beginners@haskell.org) > > 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" <k.bleijenb...@inter.nl.net> Subject: Re: [Haskell-beginners] flatten comma operator To: <beginners@haskell.org> Message-ID: <201206060747.q567l2sb005...@smtp20.nijmegen.internl.net> 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:a...@unnali.com] Verzonden: woensdag 6 juni 2012 8:43 Aan: Kees Bleijenberg CC: beginners@haskell.org 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 > > Beginners@haskell.org (mailto:Beginners@haskell.org) > > http://www.haskell.org/mailman/listinfo/beginners > ------------------------------ Message: 4 Date: Wed, 6 Jun 2012 17:46:58 +1000 From: Arlen Cuss <a...@unnali.com> Subject: Re: [Haskell-beginners] wrapping text in a multiline string To: Rico Moorman <rico.moor...@gmail.com> Cc: beginners@haskell.org Message-ID: <a1e683b216814a5bb85cbdcf58334...@unnali.com> 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 <a...@unnali.com > (mailto:a...@unnali.com)> 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 > > > Beginners@haskell.org (mailto:Beginners@haskell.org) > > > (mailto:Beginners@haskell.org) > > > http://www.haskell.org/mailman/listinfo/beginners > > > ------------------------------ Message: 5 Date: Wed, 6 Jun 2012 09:04:41 +0100 From: Miguel Negrao <miguel.negrao-li...@friendlyvirus.org> Subject: Re: [Haskell-beginners] wxHaskell path To: beginners@haskell.org Message-ID: <9411be75-323a-477a-b948-4b0863a28...@friendlyvirus.org> 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 Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners End of Beginners Digest, Vol 48, Issue 7 ****************************************