Объяснение функции чтения Хаскелла
Интересно, кто-нибудь знаком с Прелюдией? 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, поэтому компилятор может определить, какой тип read
s
так как myFunc
возвращает любой вызов read
оценивается в.