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: [Haskell-cafe] Unable to install packages (Tim Baumgartner)
2. hGetContents, unicode and linux (Erik de Castro Lopo)
3. Re: hGetContents, unicode and linux (Michael Snoyman)
4. Re: hGetContents, unicode and linux (Yitzchak Gale)
5. Re: hGetContents, unicode and linux (Yitzchak Gale)
6. Re: hGetContents, unicode and linux (Erik de Castro Lopo)
7. Re: hGetContents, unicode and linux (Michael Snoyman)
8. Re: hGetContents, unicode and linux (Michael Snoyman)
----------------------------------------------------------------------
Message: 1
Date: Sat, 27 Nov 2010 20:14:37 +0100
From: Tim Baumgartner <[email protected]>
Subject: [Haskell-beginners] Re: [Haskell-cafe] Unable to install
packages
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
Hi Roland,
I installed Leksah on Ubuntu 10.10 recently using the instructions
found on
http://rizwanbulbul.blogspot.com/2010/06/installing-leksah-gtk-gtk2hs-and-glade.html
It was quite straight forward for me.
Regards
Tim
2010/11/27 Roland Senn <[email protected]>:
> I learned a little bit Haskell with Hugs on Windows and now I want to
> develop on Linux.
>
> I installed the Haskell Platform on Unbunto 10.10. There were no problems.
> Then I tried to install Leksah with
> sudo cabal install leksah --global
> It failed with:
> Resolving dependencies...
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/Gtk2HsSetup.hs:25:0:
> warning: #warning Setup.hs is guessing the version of Cabal. If
> compilation of Setup.hs fails use -DCABAL_VERSION_MINOR=x for Cabal version
> 1.x.0 when building (prefixed by --ghc-option= when using the 'cabal'
> command)
> [1 of 2] Compiling Gtk2HsSetup (
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/Gtk2HsSetup.hs,
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/dist/setup/Gtk2HsSetup.o
> )
> [2 of 2] Compiling Main (
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/Setup.hs,
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/dist/setup/Main.o )
> Linking
> /tmp/gtksourceview2-0.11.12661/gtksourceview2-0.11.1/dist/setup/setup ...
> Configuring gtksourceview2-0.11.1...
> Preprocessing library gtksourceview2-0.11.1...
> Building gtksourceview2-0.11.1...
> [ 1 of 13] Compiling Graphics.UI.Gtk.SourceView.Signals (
> dist/build/Graphics/UI/Gtk/SourceView/Signals.hs,
> dist/build/Graphics/UI/Gtk/SourceView/Signals.o )
> Graphics/UI/Gtk/SourceView/Signals.chs:51:46:
> Module `System.Glib.UTFString' does not export `maybePeekUTFString'
> cabal: Error: some packages failed to install:
> gtksourceview2-0.11.1 failed during the building phase. The exception was:
> ExitFailure 1
> leksah-0.8.0.8 depends on gtksourceview2-0.11.1 which failed to install.
>
> I searched the Internet on "gtksourceview2 maybePeekUTFString" and found a
> patch:
> http://www.mail-archive.com/[email protected]/msg00971/gtk_0_11_2-needs-glib--__-0_11_2-for-maybepeekutfstring.dpatch
>
> As a newby with the Haskell tools, I searched the Internet on how to install
> a patch.
> I found dpm and I tried to install it with:
>
> sudo cabal install dpm --global
>
> It failed with:
> configure: error: in `/tmp/terminfo-0.3.1.31936/terminfo-0.3.1.3':
> configure: error: curses headers could not be found, so this package cannot
> be built
> See `config.log' for more details.
> cabal: Error: some packages failed to install:
> DPM-0.2.1 depends on terminfo-0.3.1.3 which failed to install.
> darcs-2.5 depends on terminfo-0.3.1.3 which failed to install.
> haskeline-0.6.3.2 depends on terminfo-0.3.1.3 which failed to install.
> terminfo-0.3.1.3 failed during the configure step. The exception was:
> ExitFailure 1
>
> So after installing Haskell Platform, I only found broken packages!
>
> What can I do to install Leksah?
> _______________________________________________
> Haskell-Cafe mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
------------------------------
Message: 2
Date: Sun, 28 Nov 2010 17:26:44 +1100
From: Erik de Castro Lopo <[email protected]>
Subject: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=US-ASCII
Hi all,
I've got a trivial test program:
main :: IO ()
main
= do text <- readFile "unicode.txt"
putStr text
which I compile with ghc-6.12.1 (from Debian) and when it runs I get:
hGetContents: invalid argument (Invalid or incomplete multibyte or wide
character)
I've done some googling which seems to suggest that I need to set
the LANG environment variable, but I already have that set to
en_AU.UTF-8.
Clues?
Cheers,
Erik
--
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/
------------------------------
Message: 3
Date: Sun, 28 Nov 2010 08:35:58 +0200
From: Michael Snoyman <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
On Sun, Nov 28, 2010 at 8:26 AM, Erik de Castro Lopo
<[email protected]> wrote:
> Hi all,
>
> I've got a trivial test program:
>
> main :: IO ()
> main
> = do text <- readFile "unicode.txt"
> putStr text
>
> which I compile with ghc-6.12.1 (from Debian) and when it runs I get:
>
> hGetContents: invalid argument (Invalid or incomplete multibyte or wide
> character)
>
> I've done some googling which seems to suggest that I need to set
> the LANG environment variable, but I already have that set to
> en_AU.UTF-8.
>
> Clues?
>
> Cheers,
> Erik
Perhaps a silly question, but are you certain that the input file is
valid UTF-8? You could also try using the readFile from
utf8-string[1], which I believe ignores improper UTF8 sequences. A
theoretically better approach is to read the contents as a lazy
bytestring and then use the decode functions from the text package,
but that's a little bit more work.
[1]
http://hackage.haskell.org/packages/archive/utf8-string/0.3.6/doc/html/System-IO-UTF8.html#v:readFile
------------------------------
Message: 4
Date: Sun, 28 Nov 2010 08:40:32 +0200
From: Yitzchak Gale <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
Erik de Castro Lopo wrote:
> hGetContents: invalid argument (Invalid or incomplete multibyte or wide
> character)
> I've done some googling which seems to suggest that I need to set
> the LANG environment variable, but I already have that set to
> en_AU.UTF-8.
You can check to see what encoding GHC has picked up from your
environment by examining localeEncoding.
You can force the encoding to UTF-8 by
hSetEncoding stdin utf8
hSetEncoding stdout utf8
All of the above in the context of import System.IO, of course.
Regards,
Yitz
------------------------------
Message: 5
Date: Sun, 28 Nov 2010 08:53:56 +0200
From: Yitzchak Gale <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: Michael Snoyman <[email protected]>
Cc: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
Michael Snoyman wrote:
> Perhaps a silly question, but are you certain that the input file is
> valid UTF-8?
That is a very good point.
> You could also try using the readFile from utf8-string...
> [or] read the contents as a lazy
> bytestring and then use the decode functions...
Those approaches are now both deprecated. Either do
what you are doing, which gives you conceptually simple
strings as lists of Char. Or, for better efficiency, use
the text package:
> import qualified Data.Text.Lazy as T
> main :: IO ()
> main
> = do text <- T.readFile "unicode.txt"
> T.putStr text
In any case, you still need to have the correct encoding
set on the handles as before. (And the input needs to
be valid for your selected encoding.)
Regards,
Yitz
------------------------------
Message: 6
Date: Sun, 28 Nov 2010 18:18:55 +1100
From: Erik de Castro Lopo <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset=US-ASCII
Yitzchak Gale wrote:
> You can check to see what encoding GHC has picked up from your
> environment by examining localeEncoding.
How do I do that? TextEncoding doesn't seem to be Showable.
> You can force the encoding to UTF-8 by
>
> hSetEncoding stdin utf8
> hSetEncoding stdout utf8
>
> All of the above in the context of import System.IO, of course.
Thank you. My program:
main :: IO ()
main
= do h <- openFile "unicode.txt" ReadMode
hSetEncoding h utf8
hSetEncoding stdout utf8
text <- hGetContents h
putStr text
now works as it should.
Cheers,
Erik
--
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/
------------------------------
Message: 7
Date: Sun, 28 Nov 2010 09:19:58 +0200
From: Michael Snoyman <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Cc: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
On Sun, Nov 28, 2010 at 8:53 AM, Yitzchak Gale <[email protected]> wrote:
> Michael Snoyman wrote:
>> Perhaps a silly question, but are you certain that the input file is
>> valid UTF-8?
>
> That is a very good point.
>
>> You could also try using the readFile from utf8-string...
>> [or] read the contents as a lazy
>> bytestring and then use the decode functions...
>
> Those approaches are now both deprecated. Either do
> what you are doing, which gives you conceptually simple
> strings as lists of Char. Or, for better efficiency, use
> the text package:
>
>> import qualified Data.Text.Lazy as T
>> main :: IO ()
>> main
>> = do text <- T.readFile "unicode.txt"
>> T.putStr text
>
> In any case, you still need to have the correct encoding
> set on the handles as before. (And the input needs to
> be valid for your selected encoding.)
Which is why I would actually recommend sticking with the
bytestring/text combination when you know what the file encoding will
be and it is not system-dependent. It's the approach that I use with
Hamlet et al for precisely that reason.
Michael
------------------------------
Message: 8
Date: Sun, 28 Nov 2010 09:27:19 +0200
From: Michael Snoyman <[email protected]>
Subject: Re: [Haskell-beginners] hGetContents, unicode and linux
To: [email protected]
Cc: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
On Sun, Nov 28, 2010 at 9:19 AM, Michael Snoyman <[email protected]> wrote:
> On Sun, Nov 28, 2010 at 8:53 AM, Yitzchak Gale <[email protected]> wrote:
>> Michael Snoyman wrote:
>>> Perhaps a silly question, but are you certain that the input file is
>>> valid UTF-8?
>>
>> That is a very good point.
>>
>>> You could also try using the readFile from utf8-string...
>>> [or] read the contents as a lazy
>>> bytestring and then use the decode functions...
>>
>> Those approaches are now both deprecated. Either do
>> what you are doing, which gives you conceptually simple
>> strings as lists of Char. Or, for better efficiency, use
>> the text package:
>>
>>> import qualified Data.Text.Lazy as T
>>> main :: IO ()
>>> main
>>> = do text <- T.readFile "unicode.txt"
>>> T.putStr text
>>
>> In any case, you still need to have the correct encoding
>> set on the handles as before. (And the input needs to
>> be valid for your selected encoding.)
>
> Which is why I would actually recommend sticking with the
> bytestring/text combination when you know what the file encoding will
> be and it is not system-dependent. It's the approach that I use with
> Hamlet et al for precisely that reason.
Sorry for replying to myself, but I didn't clarify that very well.
You're right that setting encoding on the handle can work well enough
for this, but it does *not* address invalid byte sequences (AFAIK),
which can be dealt with using the bytestring/text decoding
combination.
Michael
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 29, Issue 44
*****************************************