Size: a a a

2021 March 17

D

Dreamerinnoise in Haskell Start
Dreamerinnoise
if это просто сахар
if e1 then e2 else e3   =   case e1 of { True -> e2 ; False -> e3 }
источник

p

progrems2334 in Haskell Start
Dreamerinnoise
if e1 then e2 else e3   =   case e1 of { True -> e2 ; False -> e3 }
🤔🤔🤔
источник

D

Dreamerinnoise in Haskell Start
progrems2334
🤔🤔🤔
перед тем как скомпилировать, компилятор дешугарит всё, несколько раз
источник

JS

Jerzy Syrowiecki in Haskell Start
progrems2334
Читаю книжку, много тут способов заifить. И if-then-else, и множественный if, и паттерн матчинг, и case ... of 🤔
это способы ветвления, а не "ифить". а иф — частный случай ветвления
источник

JS

Jerzy Syrowiecki in Haskell Start
progrems2334
Здравствуйте. В одной книжке нашёл такой пример конструкции ветвления:
analyzeGold :: Int -> String
analyzeGold standard =
  if standard == 999
     then "Wow, 999 standard!"
     else if standard == 750
        then "Great! 750 standard."
        else if standard == 585
           then "Not bad! 585 standard."
           else "I don't know such a standard..."

Автор приводил её в пример тому, почему образцы лучше (что не будет такой лестницы).
Сдвинул всё это дело самостоятельно так:
analyzeGold :: Int -> String
analyzeGold standard =
  if standard == 999
     then "Wow, 999 standard!"
  else if standard == 750
     then "Great! 750 standard."
  else if standard == 585
     then "Not bad! 585 standard."
  else "I don't know such a standard..."

Никаких ошибок не вызывается, всё работает также.
Есть ли тут какой-то стандарт (как правильно писать) или можно и так, и так?
лучше написать просто значение, чем операциюпроверкинаравенствозначению
источник

p

progrems2334 in Haskell Start
Jerzy Syrowiecki
это способы ветвления, а не "ифить". а иф — частный случай ветвления
Просто так написал, конечно
источник

JS

Jerzy Syrowiecki in Haskell Start
даже сишник вместо цепочки if-else-if пишет switch, когда может
источник

JS

Jerzy Syrowiecki in Haskell Start
так же и хаскелисты делают, только мы можем чуть больше
источник

JS

Jerzy Syrowiecki in Haskell Start
гварды читаются лучше, чем if-else-if, потому что содержат меньше синтаксической соли
источник

AY

Andrei Yangabishev in Haskell Start
А я долго понять эту конструкцию не мог

case targets of
   Right (target, toStdout) -> do
     let
       options
         | toStdout  = ParseOptions NoVerbose Force toStdout file
         | otherwise = ParseOptions verbose force toStdout file

вот это options вроде как значение и вроде функция. Еще где-то встречал в where или let функцию с паттернами, т.е. одно и тоже имя функции упоминается несколько раз, но написано было так что долго вкуривал.

И еще. Есть в Хаскеле система именования констант? А то смотрю в код, вижу MyApp.appConfig, а то что это константа изначально не видно

appConfig :: FilePath
appConfig = "config.yaml"


и приходится ходить за каждым определением.
источник

к

кана in Haskell Start
Andrei Yangabishev
А я долго понять эту конструкцию не мог

case targets of
   Right (target, toStdout) -> do
     let
       options
         | toStdout  = ParseOptions NoVerbose Force toStdout file
         | otherwise = ParseOptions verbose force toStdout file

вот это options вроде как значение и вроде функция. Еще где-то встречал в where или let функцию с паттернами, т.е. одно и тоже имя функции упоминается несколько раз, но написано было так что долго вкуривал.

И еще. Есть в Хаскеле система именования констант? А то смотрю в код, вижу MyApp.appConfig, а то что это константа изначально не видно

appConfig :: FilePath
appConfig = "config.yaml"


и приходится ходить за каждым определением.
> вот это options вроде как значение и вроде функция
почему? Чем это отличается от options = if toStdout then ... else ...
?

> а то что это константа изначально не видно
а чем это может быть еще, тут все константы, нельзя переопределить или смутировать appConfig в этом модуле, какое бы определение у него не было

> и приходится ходить за каждым определением
зачем за ними ходить, не понял
источник

AY

Andrei Yangabishev in Haskell Start
кана
> вот это options вроде как значение и вроде функция
почему? Чем это отличается от options = if toStdout then ... else ...
?

> а то что это константа изначально не видно
а чем это может быть еще, тут все константы, нельзя переопределить или смутировать appConfig в этом модуле, какое бы определение у него не было

> и приходится ходить за каждым определением
зачем за ними ходить, не понял
Я вижу код, вижу в нем использование незнакомого определением appConfig, описание appConfig в другом модуле, мне приходится кликать на определение и смотреть что это такое, а хотелось бы сразу понимать что это константа и мыслетопливо на это не тратить. В Swift для этого может k-префикс использоваться, kAppConfig, в Си может быть записано как APP_CONFIG. В Хаскеле насколько я понял все upper case не принято, а как принято? Мне как appConfig как константу отличить от функции которая выдает appConfig?
источник

к

кана in Haskell Start
а чем отличается функция, которая выдает appConfig от константы?
источник

A

Aragaer in Haskell Start
ну собссно да, функция от нуля аргументов от константы ничем не отличается
источник

A

Aragaer in Haskell Start
есть искусственный вариант, когда надо что-то считать явно, но без аргументов, то есть юнит передавать. Но это так.
источник

JS

Jerzy Syrowiecki in Haskell Start
Andrei Yangabishev
А я долго понять эту конструкцию не мог

case targets of
   Right (target, toStdout) -> do
     let
       options
         | toStdout  = ParseOptions NoVerbose Force toStdout file
         | otherwise = ParseOptions verbose force toStdout file

вот это options вроде как значение и вроде функция. Еще где-то встречал в where или let функцию с паттернами, т.е. одно и тоже имя функции упоминается несколько раз, но написано было так что долго вкуривал.

И еще. Есть в Хаскеле система именования констант? А то смотрю в код, вижу MyApp.appConfig, а то что это константа изначально не видно

appConfig :: FilePath
appConfig = "config.yaml"


и приходится ходить за каждым определением.
функцией является значение типа a -> b, всё остальное не функция.
источник

JS

Jerzy Syrowiecki in Haskell Start
Andrei Yangabishev
Я вижу код, вижу в нем использование незнакомого определением appConfig, описание appConfig в другом модуле, мне приходится кликать на определение и смотреть что это такое, а хотелось бы сразу понимать что это константа и мыслетопливо на это не тратить. В Swift для этого может k-префикс использоваться, kAppConfig, в Си может быть записано как APP_CONFIG. В Хаскеле насколько я понял все upper case не принято, а как принято? Мне как appConfig как константу отличить от функции которая выдает appConfig?
объясните, пожалуйста, что вы называете константой.

я вижу appConfig и понимаю, что это конфиг. вопрос про конктанту не возникает
источник

AY

Andrei Yangabishev in Haskell Start
Jerzy Syrowiecki
функцией является значение типа a -> b, всё остальное не функция.
Так options это что?
источник

JS

Jerzy Syrowiecki in Haskell Start
Andrei Yangabishev
Так options это что?
значение
источник

D

Dreamerinnoise in Haskell Start
паттерн
источник