Забавная хрень
Dec. 6th, 2009 11:57 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
В обычных языках параметры, которые содержат дефолтные значения, нужно запиливать в конец списка параметров, иначе не скомпилируется. Т.е что-то вроде strToIntDef(s:string;default:integer=0);
В хаскеле сия привычка вылазит боком, так как сделать из функции с полным набором параметров функцию с дефолтными можно частичным ее применением, а для этого нужно чтобы параметры, которые часто используются с дефолтными значениями были в начале, иначе объявления получаются слишком многословные или приходится использовать всякие flip:
strToIntDef:: String -> Int -> Int
...
strToIntDef' x = strToIntDef x 0
а вот если сделать так, то получается гуманно, и можно вообще вторую функцию не объявлять, а использовать сразу (strToIntDef 0) где нужно
strToIntDef:: Int -> String -> Int
...
strToIntDef' = strToIntDef 0
В хаскеле сия привычка вылазит боком, так как сделать из функции с полным набором параметров функцию с дефолтными можно частичным ее применением, а для этого нужно чтобы параметры, которые часто используются с дефолтными значениями были в начале, иначе объявления получаются слишком многословные или приходится использовать всякие flip:
strToIntDef:: String -> Int -> Int
...
strToIntDef' x = strToIntDef x 0
а вот если сделать так, то получается гуманно, и можно вообще вторую функцию не объявлять, а использовать сразу (strToIntDef 0) где нужно
strToIntDef:: Int -> String -> Int
...
strToIntDef' = strToIntDef 0
no subject
Date: 2009-12-06 12:53 pm (UTC)no subject
Date: 2009-12-07 11:27 am (UTC)Еще интересный факт - функция с именованным параметром с значением поумолчанию отличается по типу от функции с обязательным именованным параметром.
no subject
Date: 2009-12-06 01:59 pm (UTC)no subject
Date: 2009-12-06 11:43 pm (UTC)