Я пытаюсь понять тип выражения const (++)
в Haskell. Я знаю отдельные типы const
и (++)
, и я знаю, что вы можете не указывать параметры, чтобы вернуть частично примененные функции.
Если я наберу :t const (++)
, я получу const (++) :: b -> [a] -> [a] -> [a]
. Я думаю, что (++)
требуется два списка (однако я знаю, что все функции в Haskell - это каррированные функции, которые на самом деле принимают только один аргумент) и возвращает список. Этот список затем является первым аргументом функции const
, которая ожидает еще одного аргумента. Итак, я подумал, что тип будет const (++) :: [a] -> [a] -> b -> [a].
Но, например: const (++) 1 "hello" "you"
возвращает "helloyou"
. Почему то, что возвращается из операции const
, не является первым аргументом, согласно определению const
, которое равно const x _ = x
? Где в моем мыслительном процессе я ошибаюсь?