2014-12-21 1 views
-3

У меня есть две функции:Почему использование моей функции в качестве параметра для другой функции вызывает ошибку? Haskell

f1 :: Bool -> Int 
f1 x 
    | x == True  = 5 
    | x == False = 10 

f2 :: Int -> Int 
f2 x = x * 2 

Поскольку выход f1 правильный вход для f2, как приходят

f2 f1 True 

вызывает ошибку?

Я не знал, что помечать, поэтому теги могут быть неуместными.

+0

Попробуйте 'f2 (f1 True)' или 'f2 $ f1 True'. – Jubobs

+0

@Jubobs Не могли бы вы привести пример, где (f g) x - хорошо сформированное выражение, причем f и g оба являются функциями? – Arthur

+0

@ Артур 'фильтр нечетный [1, 2, 3]' например. – sepp2k

ответ

4

Функциональное применение лево-ассоциативное, поэтому f2 f1 True такое же, как (f2 f1) True, а не f2 (f1 True). (f2 f1) True, очевидно, неверно типичен, так как аргумент f2 имеет тип Int, но f1 имеет тип Bool -> Int, а не Int.