2015-01-14 16 views

Odpowiedz

28

To dlatego, że reprezentacja ciąg masz nie jest reprezentacją ciąg o String, potrzebuje cytatów osadzone w ciągu samego:

> read "\"asdf\"" :: String 
"asdf" 

To jest tak, że read . show === id dla String:

> show "asdf" 
"\"asdf\"" 
> read $ show "asdf" :: String 
"asdf" 

Na marginesie zawsze dobrze jest użyć funkcji readMaybe z Text.Read:

> :t readMaybe 
readMaybe :: Read a => String -> Maybe a 
> readMaybe "asdf" :: Maybe String 
Nothing 
> readMaybe "\"asdf\"" :: Maybe String 
Just "asdf" 

Pozwala to uniknąć (moim zdaniem) zepsutej funkcji read, która wywołuje wyjątek w przypadku niepowodzenia analizy składni.