2013-10-03 6 views
4

Предположительно у меня есть эти функции одного и того же типа и в результате Haskell:Список функций в Haskell

add_one :: Integer -> Integer 
add_one n = n + 1 

multiply_by_five :: Integer -> Integer 
multiply_by_five n = n * 5 

subtract_four :: Integer -> Integer 
subtract_four n = n - 4 

add_ten :: Integer -> Integer 
add_ten n = n + 10 

Как я могу сделать список из них, чтобы я мог применить его к одному аргументу типа Integer такого as:

map ($ single_argument) list_of_functions 

?

+0

Что вы хотите, как результат? Список результатов или вы хотите упорядочить функции? – bennofs

+1

В Haskell вы делаете список, перечисляя элементы внутри квадратных скобок, например [1,2,3] – Ingo

+0

Почему бы не использовать точечную нотацию для функций 'string'? – RobAu

ответ

10

Построение списков с Хаскелем осуществляется с помощью (:) и [] список конструкторы, например:

fList :: [Integer -> Integer] 
fList = add_one : multiply_by_five : subtract_four : add_ten : [] 

-- or by using some syntactic sugar 
fList' = [add_one, multiply_by_five, subtract_four, add_ten] 

Вы можете действительно карта приложение:

map ($ 3) fList 
+0

'map ($ 3) fs == ($ 3) <$> fs == [($ 3)] <*> fs == fs <*> [3] == sequence fs 3' также (с' Control.Applicative'). –

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