Объяснение функции чтения Хаскелла

Интересно, кто-нибудь знаком с Прелюдией? read функция в Хаскеле.

Тип этой функции следующий.

Read a => String -> a

Может кто-нибудь объяснить мне несколько примеров, как эта функция может быть использована и в какие типы может быть приведена строка?

Спасибо

1 ответ

Решение

Read a => String -> a Значит это a может быть любого типа, который является экземпляром Read учебный класс. Чтобы тип удовлетворял этому требованию, он должен по крайней мере иметь реализацию Read"s readPrec или же readsPrec функции. Многие встроенные типы предоставляют реализацию, и вы можете использовать deriving создать реализацию для вашего собственного data типы.

Чтобы указать, что вы хотите read Строка as, вы можете напечатать аннотировать вызов напрямую:

read "1" :: Int

Или дать функцию, заключающую в себе вызов read подпись, чтобы компилятор мог понять, что вы хотите:

myFunc :: String -> Int
myFunc s = read s

Подпись говорит, что функция возвращает Int, поэтому компилятор может определить, какой тип reads так как myFunc возвращает любой вызов read оценивается в.

Другие вопросы по тегам