Преобразовать символ оператора в соответствующую функцию

#haskell

#haskell

Вопрос:

Есть ли способ преобразовать символы ‘ ‘, ‘-‘, ‘*’, ‘/’ к соответствующим функциям? Я имею в виду такую функцию (очевидно, я пробовал, и это не сработало):

 toOperator :: Num a => String -> a -> a -> a
toOperator c = read c :: Num a => a -> a -> a
 

Комментарии:

1. В общем, нет. В Haskell нет eval функции, и фактически эта информация даже не существует во время выполнения. Однако вы можете создать таблицу поиска для определенного набора функций, поскольку функции являются значениями первого класса.

Ответ №1:

Вы можете легко определить частичную функцию для этой цели с помощью сопоставления с образцом

 Prelude> :set  m
Prelude> let f ' ' = ( )
Prelude|     f '-' = (-)
Prelude|     f '*' = (*)
Prelude|     f '/' = (/)
Prelude|
Prelude> f '*' 3 4
12.0
Prelude> f ' ' 1 2
3.0
Prelude>
 

и выведенный тип

 Prelude> :t f
f :: Fractional a => Char -> a -> a -> a