Человек из Reddit довел этот код до моего внимания:
main = do
let ns = [print 1, print 2, print 3]
sequence_ ns
sequence_ $ reverse ns
sequence_ $ tail ns ++ [head ns]
head ns
Что происходит здесь, мы имеем целый ряд операций, которые мы можем делать, например, наоборот, или получить хвост или голову.
Высокий.
То, что я хочу сделать, - это разобраться в отдельных элементах и изменить их навсегда. Например, я хочу иметь возможность сделать что-то вроде этого:
ns !! 0
и получить что-то вроде [print, 1], а затем изменить последний элемент, скажем, на 3.14, чтобы функция печатала 3.14.
Возможно ли это в Haskell, или я просто вернусь к LISP?
ВАЖНЫЙ РЕДАКТ: Я как бы ошибался. Я понимаю, что мне нужно будет создать новый список. Можно ли получить аргументы функции, которая является частью списка? То, что я хочу, - это возможность составлять функции из своих идентификаторов/аргументов, а также возможность разбивать функцию на идентификатор/аргумент, прежде чем он будет оценен.