
On Sunday 27 June 2010 00:35:27, prad wrote:
with the f :: [Tag] -> String left in ghci croaks:
====== TagSoup.hs:66:14: `Tag' is not applied to enough type arguments Expected kind `*', but `Tag' has kind `* -> *' In the type signature for `f': f :: [Tag] -> String In the definition of `ndmPapers': ndmPapers = do { tags <- fmap parseTags $ openURL "http://community.haskell.org/~ndm/downloads/"; let papers = ...; putStr $ unlines papers } where f :: [Tag] -> String f xs = fromTagText (xs !! 2) Failed, modules loaded: none. ====== (i'm guessing that Tag is some type defined in Text.HTML.TagSoup)
however, the program runs fine if i comment out the type def.
so i'm curious as to why this is so.
Neil changed the kind of Tag in tagsoup-0.8, until version 0.6, it was data Tag = TagOpen String [Attribute] | TagClose String | TagText String | TagComment String | TagWarning String | TagPosition !Row !Column and it became data Tag str = TagOpen str [Attribute str] | TagClose str ... in 0.8, I think the reason was to allow the use of ByteStrings and Data.Text in addition to plain String. It would also work with f :: [Tag String] -> String
i can't do a :t on f getting a 'not in scope' error, i guess because it is part of ndmPapers, but that seems strange to me.
It would be very nice if one could query the type of local definitions.