Как мне запустить этот метод с MonadReader и MonadIO?

Я слежу за этот пост о монаде чтения в Haskell.

Он начинается с определения:

load :: Config -> String -> IO String
load config x -> readFile (config ++ x)

Где Config — это псевдоним типа для String, представляющий имя каталога.

Метод предназначен для вывода на экран содержимого файла, например "./myFile.txt".

Я запускаю этот метод из ghci с помощью:

load "./" "myFile.txt"

Второй пример вводит монаду читателя:

load :: (MonadReader Config m, MonadIO m) => String -> m String
load x = do
    config <- ask
    liftIO $ readFile (config ++ x)

Вопрос: как запустить его из ghci?

Я пробовал с такими вещами, как:

(runReader load "myFile.txt") "./"

а радости нет.

Какая команда загружает ./myFile.txt?


person Marco Faustinelli    schedule 11.09.2019    source источник
comment
В чем именно у вас проблема? Никакая радость не является ошибочным утверждением.   -  person AJF    schedule 11.09.2019
comment
Попробуйте изменить (runReader на runReader (.   -  person melpomene    schedule 11.09.2019


Ответы (1)


person    schedule
comment
Вы принц. Благодарю вас! Можете ли вы еще больше расширить ПОЧЕМУ мне нужен трансформатор? Я предполагаю, что в типе m скрыто какое-то монадное наслоение, но пока я его не вижу. - person Marco Faustinelli; 12.09.2019
comment
@MarcoFaustinelli В первом приближении ограничение MonadReader Config m говорит, что m - это стек преобразователя монад, который содержит ReaderT Config где-то в стеке. Ограничение MonadIO m говорит, что монада внизу стека равна IO. Таким образом, ReaderT Config IO в некотором смысле является своего рода минимальным стеком преобразования монад, который удовлетворяет ограничению. - person Daniel Wagner; 12.09.2019
comment
Я не знаком с именами преобразователей без T в конце; но если я посмотрю на взлом Я не вижу ни одного экземпляра MonadReader, подходящего для использования здесь. Что мне не хватает? - person Marco Faustinelli; 12.09.2019
comment
@MarcoFaustinelli instance Monad m => MonadReader r (ReaderT r m), четвертый снизу в списке экземпляров по второй предоставленной вами ссылке, используется здесь. - person Daniel Wagner; 12.09.2019