Haskell string support

August 5, 2009 por Antonio   Comentarios (4)

Un problema muy interesante

s = "λ"
main = do
writeFile "test.txt" s
s2 <- readFile "test.txt"
print (s == s2)

Si analizamos y hacemos correr este pequeño programa el resultado deberia ser True por logica, pero el resultado real es False.

Segun Christian creador del blog Luke Plant's

El problema es con la biblioteca estándar Haskell - muchas de las funciones previstas por el Prelud, System.IO, System.Posix y muchos otros son completamente roto (por diseño).  leer mas

Don Stewart dio la siguiente solucion para este problema

    import Prelude hiding (writeFile, readFile, print)
import System.IO.UTF8

s = "λ"
main = do
writeFile "test.txt" s
s2 <- readFile "test.txt"
print (s == s2)

Si hacemos correr este ejemplo el resultado sera True.

 

 

 

Maybe ese problema ya se arreglo en la version 6.8.2 de GHC.
Pero a mi me devuelve True.

carliros@cathrina:~/Documents/tmp$ cat antonio.hs
-- import Prelude hiding (writeFile, readFile, print)
-- import System.IO.UTF8

s = "λ"

main = do
    writeFile "test.txt" s
    s2 <- readFile "test.txt"
    print (s == s)

carliros@cathrina:~/Documents/tmp$ ghci antonio.hs
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( antonio.hs, interpreted )
Ok, modules loaded: Main.
*Main> main
True
*Main>

Es mas, si inserto las librerias que dices, aun me sigue saliendo True.

Que version de GHC usas?

Carlos Gomez hace 394 dias

Tal parece que ese bug es por no tener un buen soporte para Unicode en las versiones anteriores a GHC 6.12.

Carlos Gomez hace 394 dias

Tengo la version 6.10.1 del ghc, se supone que deberia estar resuelto este bug ya que la version de tu ghc es una version antigua a la que yo tengo, tendriamos que probar con las ultimas verisiones del ghc para ver si sigue este problema

Antonio hace 393 dias

Por lo que se no es un bug, si no mas bien que el ghc, no trabaja con utf8 por defecto(es necesario trabajar con bibliotecas extras si se quiere), en si trabaja con ansi, por lo que me imagino que en tu SO le pasas una cadena utf8 pero el ghc la interpreta como ansi por lo que no empareja.

Juan Jose Olivera hace 389 dias