Size: a a a

2021 March 17

DS

Dmitrii Skurikhin in Haskell Start
Aragaer
спасибо. А как можно из пакета узнать правильное имя для прописывания в package.yaml? А то я глянул в другой свой проект, там все зависимости lower-case
смотрю здесь всегда
источник

MZ

Mikhail Zhuravlev in Haskell Start
Jerzy Syrowiecki
нет, по репорту это pattern binding
f :: [Char]
f = x where x = "a eto kto togda?"

Синтаксис function binding.
источник

A

Aragaer in Haskell Start
Dmitrii Skurikhin
смотрю здесь всегда
не сразу на скрине нашел, куда смотреть. Понял, спасибо
источник

MZ

Mikhail Zhuravlev in Haskell Start
А, нет, похоже все таки правда паттерн.
источник

MZ

Mikhail Zhuravlev in Haskell Start
Хотя функции без параметров нужны либо для произведения побочного эффекта, либо для отложения вычисления, а вычисления и так откладываются по умолчанию.
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
f :: [Char]
f = x where x = "a eto kto togda?"

Синтаксис function binding.
там же написано в репорте, на который вы ссылаетесь, что если слева паттерн (одно имя — паттерн), то это не функциональный синтаксис
источник

MZ

Mikhail Zhuravlev in Haskell Start
Да, нашел.
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
f :: [Char]
f = x where x = "a eto kto togda?"

Синтаксис function binding.
можно спросить у компилятора

> runQ [d| f = a |]
[ ValD ( VarP f_2 )
   ( NormalB ( UnboundVarE a ) ) []
]

> runQ [d| f _ = a |]
[ FunD f_3
   [ Clause [ WildP ]
       ( NormalB ( UnboundVarE a ) ) []
   ]
]
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
Ладно, я нашел в спеке ответ, https://www.haskell.org/definition/haskell98-report.pdf 4.4.3 Function and Pattern Binding

We distinguish two cases within this syntax: a pattern binding occurs when the left hand side is a pat otherwise, the binding is called a function binding. Either binding may appear at the top-level of a module or within a where or let construct.
но это всё не имееет значения, поотому что

f = \x -> y

и

f x = y

означают одно и то же

(на самом деле есть разница, но она ужасно тонкая, и не важна сейчас)
источник

MZ

Mikhail Zhuravlev in Haskell Start
Короче по простому функция это то, к чему можно применить аргументы. Только я не еще не понял, кто чей сахар, fn  =  \x -> x или fn x  = x.
источник

D

Dreamerinnoise in Haskell Start
Mikhail Zhuravlev
Короче по простому функция это то, к чему можно применить аргументы. Только я не еще не понял, кто чей сахар, fn  =  \x -> x или fn x  = x.
второе транслируется во первое
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
Короче по простому функция это то, к чему можно применить аргументы. Только я не еще не понял, кто чей сахар, fn  =  \x -> x или fn x  = x.
ничей. это разные синтаксисы с одной семантикой
источник

MZ

Mikhail Zhuravlev in Haskell Start
И тут fn  =  \x -> x получается pattern binding, правильно? Только никакой паттерн кроме имени для функции применить нельзя.
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
И тут fn  =  \x -> x получается pattern binding, правильно? Только никакой паттерн кроме имени для функции применить нельзя.
синтаксически — pattern binding или value declaration
источник

JS

Jerzy Syrowiecki in Haskell Start
Mikhail Zhuravlev
И тут fn  =  \x -> x получается pattern binding, правильно? Только никакой паттерн кроме имени для функции применить нельзя.
семантически — просто функция
источник

JS

Jerzy Syrowiecki in Haskell Start
Dreamerinnoise
второе транслируется во первое
(на самом деле нет, но это очень тонкие тонкости для этого чата)
источник

к

кана in Haskell Start
Mikhail Zhuravlev
Сишной функции f(){return 1+2;} примерно соответствует хаскельное fn = 1 + 2, с разницей, что в си значение вычислится при вызове функции (если не думать, что компилятор умеет такое заменять на вычисленный литерал при компиляции), а в хаскеле мы точно не знаем, когда вычислится значение.
это уже из-за ленивости, а не потому что это функция
источник

к

кана in Haskell Start
Mikhail Zhuravlev
И тут fn  =  \x -> x получается pattern binding, правильно? Только никакой паттерн кроме имени для функции применить нельзя.
можно, любые паттерны можно, которые для функции валидны
источник

к

кана in Haskell Start
_ = \a -> a
a@b = \a -> a
c@(d@_) = \a -> a
~e = \a -> a
источник

MZ

Mikhail Zhuravlev in Haskell Start
Кстати не относился к _ как к паттерну, в других языках это как правило заглушка для линтера, чтобы не ругался на неиспользуемую переменную.
источник