Создание текстового файла с пользовательским типом данных - PullRequest
0 голосов
/ 02 мая 2018

У меня есть пользовательский тип данных:

data TextEditor = TextEditor [Char] [Char] [Char] deriving (Show)

Используется для удержания текста перед курсором, затем после курсора, а затем удерживает только выбранные варианты.

Я хочу иметь функцию «сохранить», которая позволяет пользователю сохранять содержимое этого типа данных в текстовый файл. Мои текущие версии:

save :: TextEditor -> String -> IO()
save (TextEditor b a x) f = writeFile f (TextEditor b a x)

но writeFile занимает String, а я передаю три [Char] Есть ли способ преобразовать это в строку или есть что-то, что я пропускаю?

Спасибо

1 Ответ

0 голосов
/ 02 мая 2018

если вы derive (Show, Read) вы можете

save :: TextEditor -> FilePath -> IO ()
save editor f = writeFile f $ show editor

restore:: FilePath -> IO (Maybe TextEditor)
restore f = readMay <$> readFile f

Примечание

  • readMay из пакета сейф .
  • read / show / String очень неэффективны, поэтому замечание об использовании чего-то вроде aeson для (де) сериализации является хорошей идеей.
  • если у вас есть пользовательский экземпляр show - производный read не будет работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...