2016-12-29 1 views
1

В GHCi, когда я печатаю pure 2, он возвращает 2; или pure "aa" возвращает "aa". Интересно, как этот прикладной экземпляр разрешен для 2 или «aa» GHCi.Понимание того, как чистая функция разрешена в Haskell

+1

http://stackoverflow.com/a/28979021/3608068 – user3608068

+0

спасибо @ пользователь3608068. Ссылка, которую вы предоставили, точно отвечает на мой вопрос, но я не смог ее найти, когда искал ее. –

ответ

6

GHCi выполняет некоторые магии, чтобы быть удобным.

При вводе выражения, тип которого имеет вид ... => f a, он пытается создать экземпляр f по адресу IO. В вашем случае это возможно, так как IO является аппликативным (и монадой).

Во-вторых, когда введено выражение, имеющее тип формы ... => IO a, оно запускается как действие ввода-вывода.

И, наконец, если a имеет класс Show, результат распечатывается. В вашем случае "aa" - результат (и тип a - String), поэтому GHCi печатает это.

+0

Спасибо, мистер чи, я чувствую себя просветленным сейчас :) –

Смежные вопросы