rapture
24.07.2011 09:53 unknown
ghci> add a b = a + b
<interactive>:1:9: parse error on input `='
Шо за нах????
let add a b = a + b
let же
ghci> let doubleMe = \x → x*2
doubleMe :: Integer → Integer
ghci> doubleMe 1
2
it :: Integer
ghci> map doubleMe [1..10]
[2,4,6,8,10,12,14,16,18,20]
it :: [Integer]
ghci>
Так?
ага. а теперь то же самое, но с let doubleMe x = x*2
ghci> let tripleMe x = x*3
tripleMe :: Num a => a → a
ghci> map tripleMe [1..10]
[3,6,9,12,15,18,21,24,27,30]
it :: [Integer]
ghci>
ну вот, неговно
В то же время
ghci> map (let tripleMe x = x*3) [1..10]
<interactive>:1:26: parse error on input `)'
И в то же время
ghci> map ( let quartUs = \x → x * 4 ) [1..10]
<interactive>:1:33: parse error on input `)'
ghci> map ( quartUs = \x → x * 4 ) [1..10]
<interactive>:1:15: parse error on input `='
ghci>
Говно :(
это ты говно. Заебал писать хуйню и называть всё говном. Иди доки читай
Верихуйман, тебе никто не мешает меня заблеклистить и спать спокойно. Ты мне лучше скажи, в чем ошибка. А то мне от той хуйни про возврат второго аргумента аж икается.
почитай про let expressions. в середине выражения они недопустимы (и не нужны)
Про ненужны — а объявлять функцию где-то в теле другого выражения и потом ее использовать это нарушение областей видимости?
У меня, кстати, пока меня не заблеклистили, тут вопрос к авторитетному специалисту был... Мы тут с @werehuman где-то спорили на счет сигнатуры функций...
Честно говоря, мне тоже непонятно, зачем в интерпретаторе надо писать let a = b вместо a = b, но это так. Это просто определение функции a. Всё остальное так же, как всегда.
он не верит в каррирование
а, нет. Он поверил в каррирование, но потом начал утверждать, что функция возвращает невесть что вместо другой функции.
Номер псто выложи, а то у меня с интернетом плохо
а ты, похоже, удалил этот псто
ШТО???? Нифига я не удалял.
P.S. и к чему тогда фраза "а, нет. Он поверил в каррирование,"? :)
потому что в интерпретаторе ты находишься в обработчике событий в монаде IO. у тебя нет там top level definition'ов, только локальные
объявить безымянную функцию ты можешь где угодно (с fix — даже рекурсивную). let даёт тебе возможность связать с ней имя в начале блока, where — в конце
Кстати, а монады бывают вложенными? Ну то есть IO в IO
бывают. кроме IO. IO в стеке монад всегда должна находиться последней. собственно, это единственная волшебная монада в Haskell
вложение выполняется с помощью монадических трасформеров. простая композиция монад (m (n a)) или (n (m a)) не обязана быть монадой
Нашел http://psto.net/gones < http://psto.net/gones#25>
Блджад, он там имел ввиду, что функция возвращает функцию. А я что кортеж или что-то типа того. Ладно, ты выиграл.
Мне кажется или там ни разу не равно должно быть, в объявлении-то функции.
тебе кажется
И точно. Нихуя уже не помню >_<
Кажется. Там в ghci должно быть let add a b =... Это спецфичный синтаксис. А в хаскель функции и объявляются через равно.