@haskellru

Страница 722 из 1551
Alexander
30.12.2017
09:44:35
а совсем древний релиз?

A64m
30.12.2017
09:49:31
0.06

> There are several GHC features that raise vague questions in my mind about their implementation. It's hard to ask several questions that you can't put into words but one theme among these thoughts is whether GHC needs to generate code at runtime to implement certain features efficiently (e.g. thunks, partial evaluation). > Does GHC generate any native code at runtime?

как вообще он пришел к такому вопросу?

Google
Leonid
30.12.2017
10:10:49
Это откуда?

Alister
30.12.2017
10:13:34


Когда понимаешь, что следующий час пройдет отлично

A64m
30.12.2017
10:17:45
Это откуда?
https://www.reddit.com/r/haskell/comments/7mytdn/does_ghc_generate_machinenative_code_at_runtime/

Val
30.12.2017
17:22:38
Я правильно понимаю, что у stack, как и у pip с npm есть глобальная область и локальная?

Andrei
30.12.2017
17:25:09
да, у stack есть т.н. global project

не совсем так

global project используется, когда не находится stack.yaml

Val
30.12.2017
17:28:58
А, понятно

Andrei
30.12.2017
17:29:05
и local package database у него и пользовательского проекта разные

Val
30.12.2017
17:29:51
Теперь ясно стало, а то не мог stack-run поставить, а он локальный stack.yaml подхватывал

А что я тут не так делаю? Как правильно в ф-ю пользовательский ввод передать, а потом оттуда Bool вернуть? module Lib ( play ) where play = do welcomeMsg putStrLn "Enter the number:" setNumber <- readLn welcomeMsg :: IO () welcomeMsg = putStrLn "Start" setNumber :: Int -> Bool setNumber = do if x == 1 || x == 2 || x == 3 then putStrLn "OK" else putStrLn "Wrong number."

Google
GNU/Maybe
30.12.2017
18:50:57
setNumber в IO

Можете вернуть IO Bool

then do putStrLn "..." return True

Val
30.12.2017
18:55:27
Спасибо, понял. А почему на строчку setNumber <- readLn ругается? The last statement in a 'do' block must be an expression

GNU/Maybe
30.12.2017
19:01:49
Потому что <- не даёт значения, это присваивание

Сделай в конце return () если для тестов просто

Yuriy
30.12.2017
19:29:30
putStrLn — процедура, и её нельзя использовать в функциях, только в процедурах

Index
30.12.2017
19:29:30
> это присваивание На всякий случай проясню, что это не в императивном смысле присваивание (значения переменной), а присваивание имени результату монадического действия.

Разделение на процедуры/функции условное весьма, лучше от типов отталкиваться.

Вот посмотрим на определение setNumber

Обещали тип: Int -> Bool.

А затем смотрим на определение: Int не приняли, Bool не вернули.

Должна быть следующая форма: setNumber = \x -> True, например.

Принимаем x как входной Int, возвращаем True как выходной Bool.

Я смотрю есть использование x в if, но лямбды, которая будет этот x принимать, нет.

А потом в результатах веток if возвращается putStrLn "str", который имеет тип IO ().

Index
30.12.2017
19:33:45
Обещал вернуть Bool, а вернул IO (), разве так годится?

Alexander
30.12.2017
19:33:52
не надо обманывать людей, обманутые ожидание это плохо

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

Google
Index
30.12.2017
19:36:19
Дальше я смотрю, что объявлена функция setNumber, а потом написано setNumber <- readLn. Мне кажется автор думает, что <- это передача в функцию, но это не так.

Imants
30.12.2017
19:36:55
Тоже, почему бы не описать play для порядка?

Index
30.12.2017
19:37:05
Этот код заработает, если в setNumber сделать тип Int -> IO (), а <- заменить на =<<.

Потому что =<< это как раз оператор, чтобы передать результат одного IO действия в другое IO-действие.

Alexander
30.12.2017
19:37:43
так что давайте начинать с какого-то начала

:)

я бы начал с типов, потом <- и вообще этой нотации без >>=`/=«` по очереди

получится crash cource into the current exercise

Index
30.12.2017
19:38:40
Да вообще с IO в Haskell сразу начинать вредно, я бы по LYAH прошёлся спокойно, там все в хорошем порядке изложено

бесплатная книжка http://learnyouahaskell.com/chapters @valsaven

Alexander
30.12.2017
19:39:09
не, если человек решает задачку то пусть решает

а LYAH можно как bonus reading

Alexander
30.12.2017
19:39:42
а то это печально сел решать, а тебя обругали на 100350 сообщений

Index
30.12.2017
19:39:47
Что проку решать задачку без основ, меня вот производную научили в школе брать, а смысл производной я понял только потом.

Val
30.12.2017
19:39:57
Спасибо, почитаю. Просто я на js пишу, немного на python. Захотелось посмотреть на чисто функциональный язык. Вот и пытаюсь знакомиться)

Alexander
30.12.2017
19:40:16
статьи можно кинать?

Index
30.12.2017
19:40:16
знакомиться с чисто функциональным языком логично с чистых функций :)

а IO это для действий ввода-вывода, а не про функции

Alexander
30.12.2017
19:40:59
[1] P. Wadler, The essence of functional programming. .

Index
30.12.2017
19:41:06
чтобы поиграться есть интерактивный repl - GHCi, в нем можно просто функции определять и вызывать

Google
Alexander
30.12.2017
19:41:35
@valsaven сможешь найти тескт, там немного по английски но простая и хорошая статья для того чтобы почувствовать о чем это функциональное программирование

Imants
30.12.2017
19:42:44
Но ведь IO нужен для "здрассьте". Чем раньше его освоить, тем лучше.

Alexander
30.12.2017
19:42:56
и если у тебя бы возникло, что-то вроде: interract "Enter the number" (bool "Ok" "Wrong number" . `elem` [1,2,3]) (скорее всего неверно код но близко), то было бы более ясно

Index
30.12.2017
19:43:16
> Просто я на js пишу, немного на python. Haskell будет сильно отличаться, тут еще типизация статическая, я думаю после JS или Python будет проще понять какой-нибудь Clojure, а потом перейти на Haskell, (ну или можно сразу хардкорно типы осваивать)

illiatshurotshka❄️
30.12.2017
19:43:41
а clojure как здесь поможет ?

Alexander
30.12.2017
19:43:43
в мире вокруг IO функциональное программирование близко к императивному

можно не заметить слона

Index
30.12.2017
19:43:54
как js/python

illiatshurotshka❄️
30.12.2017
19:44:07
так поэтому и нужно взять простой язык с типами

Admin
ERROR: S client not available

Index
30.12.2017
19:44:23
Автор решил с ФП познакомиться, а не с типами

Index
30.12.2017
19:44:56
без тайпклассов еще нормально

Alexander
30.12.2017
19:44:59
вот все эти композиции функций и прочее легко умустить

так а я что-то не на то ссылку дал :(

Index
30.12.2017
19:46:05
@valsaven вот тебе идея на сотку, попробуй Elm, он как JS только функциональный и со статическими типами

отличная подготовка для Haskell потом

http://elm-lang.org/

Alexander
30.12.2017
19:46:42
что за статья вадлера была, где вычисление через takeWhile . map ...

Google
Val
30.12.2017
19:47:00
Хм, он сам по себе или надстройка над java? Просто я от clojure отказался из-за этого, хоть он и понравился во многом - не хочется лишний бэкграунд из java изучать ещё

Мне же не работать на нём, а так... для себя

Index
30.12.2017
19:47:15
Clojure над Java, а Elm над JS

т.е. Elm в браузере работает

Alexander
30.12.2017
19:48:22
потерялась, почему я думал что это essence of functional programming :/

@A64m_qb0 может ты знаешь про какую я думаю?

A64m
30.12.2017
19:55:17
Denis
30.12.2017
19:55:19
что за статья вадлера была, где вычисление через takeWhile . map ...
я только у Брагилевского видел dropWhile через foldr

это? https://rkrishnan.org/files/wadler-1985.pdf

Alexander
30.12.2017
19:59:28
не, другое что-то

ну и ладно

A64m
30.12.2017
20:03:51
не, другое что-то
может Why calculating is better than scheming? или вообще не Вадлер, а Why functional programming matters?

Alexander
30.12.2017
20:04:05
а наверное

@A64m_qb0 да, why functional programming matters

спасибо!

Val
30.12.2017
20:38:49
Про Elm почитал, но мне нужно что-то компилируемое в бинарники, а не браузерное. Буду Хаскель дальше мучить?

Тёма
30.12.2017
20:39:40
Elm компилируется в джаваскрипт

Alister
30.12.2017
20:47:41
А жаваскрит в бинарник

Dmitry
31.12.2017
10:03:37
а у нас stack не сломался случаем? Selecting the best among 12 snapshots... Downloaded lts-10.1 build plan. AesonException "Error in $.packages.cassava.constraints.flags['bytestring--lt-0_10_4']: Invalid flag name: \"bytestring--lt-0_10_4\""

Hithroc
31.12.2017
10:05:27
А какая версия stack у тебя?

Andrei
31.12.2017
10:07:11
я вчера обнаружил, что 1.6.3 вышел

Страница 722 из 1551