Developing a Web Browser with Haskell

April 5, 2010

Using wxHtmlWindow with wxHaskell

Filed under: hsbrowser — Tags: , — gcarlos @ 5:59 pm

Hello, today I will show you how to use the wxHtmlWindow of wxWidgets. You would notice that it’s easy to do!!!

WxWidgets has the option to use a render engine for html in his applications, it has a lot of functions to use, like any other html browser, not so rich, but it’s ok. See this documentation.

wxHtmlWindow is not available on Graphics.UI.WX of wxHaskell, it is available  on WXCore, and we can use them only importing Graphics.UI.WXCore. We can use it directly but it depent of you. I will use a function that create the object:

htmlWindow parent props = do
phtml <- htmlWindowCreate parent idAny rectNull 0 “”
set phtml props
return phtml
Until now, we can use all the functions that provides WXCore for this object, we will use an special function htmlWindowLoadPage phtmlwin url, this function permit us to load a web page as his name indicate.
So that’s all, now we will make an graphic interface to use this panel htmlWindows, something easy to demostrate his utility.
Basically we need an entry text and a button to load the web page that is written in the text entry.
inp <- entry  f   [text := “”%5D
go   <- button f [text := “Get”, on command := showPage phtml inp]
I put a default page; the showPage function does what we were talking before.
showPage html inp = do
url  <- get inp text
htmlWindowLoadPage html url
return ()
And finally we I make a layout for this browser:
set f [layout := column 5 [ hfill $ row 5 [hfill $ widget inp , widget go ]
, fill  $ margin 5 $ widget phtml
That’s all for the interface, you can compile and use it. You can download the source code from here.

April 1, 2010

The beginning of develop

Filed under: hsbrowser — Tags: , , , — gcarlos @ 8:27 pm

Hello every one, this is the beginning of a series of blogs which i will write about the development of a web browser with Haskell.
There are a lot of haskellers around the world who can suggest improvements to my project, and why not get benefits from it. Probably, and I hope, there is another haskell programmer working on a pure functional web browser, and  we can approach the problem together.

Why I take this project if there are so good web browser walking around the world? Only for the reason of experiment, experiment what would result if i use Haskell as language of development. We know (as a haskelllers) that Haskell offers us a lot of benefits (the inverse is truth too), for example the readable code make a project easy to maintain for others and easy to understand, this could be interesting in a project that has changes like versions of html, css; adding to this, we can make good abstractions thanks to the hight level of programming in a functional language. And the best part i like is  (like others said) the amount of code, it is small for Haskell.

If we think in Java, they have his own web browser that programmers can use in his applications (even if it is webkit or other), we can see too that there are others languages that were used as a language of development of web browsers. This is another reason to develop with Haskell.

Ok, but don’t you know a web browser with Haskell? refering to browser with fudgets, yes, but I want to try with wxHaskell and give support for html 4 or xhtml with css.

Do you say wxHaskell? yes, I known that is possible to use the web browser of wxWidgets with Haskell and wxHaskell, but it doesn’t have css and is all written in C++, we are not getting all the benefits of Haskell. In another blog I will writte how to use this browser with wxHaskell.

Ok, What are you thinking to do? I thinking to give support for html 4 or xhtml, css, and for now only the basic events.
I am thinking to use the tools of Utrecht, uulib for parsing process and uuagc for process my datatypes and attributes, and wxHaskell as a base library of the engine html render. And of course, some library to get the html from the web. I review others libraries for the parsing process of xml, but I don’t know if i will use this.

Ok haskellers, that’s all for today.

Create a free website or blog at