Neil says that the API of TagSoup changed in 0.9.
All usages of the type Tag should now take a type argument, e.g. Tag String.


Regards,
    Malcolm

 
On Wednesday, May 19, 2010, at 08:05AM, "Ralph Hodgson" <rhodgson@topquadrant.com> wrote:
>_______________________________________________
>Haskell-Cafe mailing list
>Haskell-Cafe@haskell.org
>http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>

Hello Neil ,

 

I was using TagSoup 0.8 with great success. On upgrading to 0.9 I have this error:

 

TQ\TagSoup\TagSoupExtensions.lhs:29:17:

    `Tag' is not applied to enough type arguments

    Expected kind `*', but `Tag' has kind `* -> *'

    In the type synonym declaration for `Bundle'

Failed, modules loaded: TQ.Common.TextAndListHandling.

 

where line 29 is the type declaration for 'bundle' in the following code:

 

> module TQ.TagSoup.TagSoupExtensions where

 

> import TQ.Common.TextAndListHandling

> import Text.HTML.TagSoup

> import Text.HTML.Download

> import Control.Monad

> import Data.List

> import Data.Char

 

> type Bundle = [Tag]

 

[snip]

 

> tagsOnPage :: String -> IO(String)

> tagsOnPage url = do

>          tags <- liftM parseTags $ openURL url

>          let results = unlines $ map(show) $ tags

>          return (results)

 

> extractTags :: Tag -> Tag -> [Tag] -> [Tag]

> extractTags fromTag toTag tags = takeWhile (~/= toTag ) $ dropWhile (~/= fromTag ) tags

 

> extractTagsBetween ::  Tag -> [Tag] -> [Tag]

> extractTagsBetween _ [] = []

> extractTagsBetween markerTag tags = if startTags == []

>              then []

>              else [head startTags] ++ (takeWhile (~/= markerTag ) $ tail startTags)

>              where

>                startTags = dropWhile (~/= markerTag ) tags

 

I need to repair this code quickly. I am hoping you can quickly help me resolve this. Thanks.

 

Ralph Hodgson,

@ralphtq