Size: a a a

2020 December 07

AA

A64m AL256m qn<co... in Haskell Start
drop 1 [] == []
источник

JM

John Meow in Haskell Start
A64m AL256m qn I0
drop 1 [] == []
А теил ошибку кинет?
источник

AA

A64m AL256m qn<co... in Haskell Start
конечно
источник

JM

John Meow in Haskell Start
Понятно, спасибо
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Aleksey Kislitsa
Все прописано но cabal ворнинги кидает
Приведите ворнинги здесь
источник

JM

John Meow in Haskell Start
Почему foldr работает на бесконечных листах?
источник

AK

Aleksey Kislitsa in Haskell Start
Aleksei (astynax) Pirogov
Приведите ворнинги здесь
Build profile: -w ghc-8.8.4 -O1
In order, the following will be built (use -v for more details):
- hstest0-0.1.0.0 (exe:hstest0) (file Main.hs changed)
Preprocessing executable 'hstest0' for hstest0-0.1.0.0..
Building executable 'hstest0' for hstest0-0.1.0.0..

<no location info>: warning: [-Wmissing-home-modules]
   These modules are needed for compilation but not listed in your .cabal file's other-modules:
       MyLib
[2 of 2] Compiling Main             ( Main.hs, /home/alex/prj/ByLanguage/haskell/hstest/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hstest0-0.1.0.0/x/hstest0/build/hstest0/hstest0-tmp/Main.o )

<no location info>: warning: [-Wmissing-home-modules]
   These modules are needed for compilation but not listed in your .cabal file's other-modules:
       MyLib
Linking /home/alex/prj/ByLanguage/haskell/hstest/dist-newstyle/build/x86_64-linux/ghc-8.8.4/hstest0-0.1.0.0/x/hstest0/build/hstest0/hstest0 ...
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Так вы убрали src из executable, или всё также указан два раза? Мне кажется, что не убрали
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Указываете путь в двух местах — в двух местах и модули экспозьте
источник

AP

Aleksei (astynax) Pi... in Haskell Start
(лучше сразу сделать нормально — указать либу зависимостью экзешника, а не костылять)
источник

к

кана in Haskell Start
John Meow
Почему foldr работает на бесконечных листах?
nats n = n : nats (n + 1)

data IntList = Nil | Cons Int IntList

foldr f z [] = z
foldr f z (x:xs) = x `f` foldr f z xs

foldr Cons Nil (nats 0) =
0 `Cons` foldr Cons Nil (nats 1) =
0 `Cons` (1 `Cons` foldr Cons Nil (nats 2)) =
...


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

JM

John Meow in Haskell Start
кана
nats n = n : nats (n + 1)

data IntList = Nil | Cons Int IntList

foldr f z [] = z
foldr f z (x:xs) = x `f` foldr f z xs

foldr Cons Nil (nats 0) =
0 `Cons` foldr Cons Nil (nats 1) =
0 `Cons` (1 `Cons` foldr Cons Nil (nats 2)) =
...


для любого этапа не важно, что там будет дальше, мы можем сматчить голову списка, то есть не обязательно вычислять весь список, чтобы получить первый элемент
Разве ему не нужно для всех элементов операцию выполнить?
источник

к

кана in Haskell Start
зачем, разве первый элемент (0) изменится как-нибудь, если мы вычислим больше элементов?

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

конкретно в данном случае при матчинге нашего нового IntList, он сначала узнает, что это за конструктор, потом вычислит первый элемент Cons (если он нам нужен, чтобы вывести скажем), а только потом, если нам нужно, мы начнем вычислять хвост точно так же
источник

JM

John Meow in Haskell Start
кана
зачем, разве первый элемент (0) изменится как-нибудь, если мы вычислим больше элементов?

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

конкретно в данном случае при матчинге нашего нового IntList, он сначала узнает, что это за конструктор, потом вычислит первый элемент Cons (если он нам нужен, чтобы вывести скажем), а только потом, если нам нужно, мы начнем вычислять хвост точно так же
Но ведь когда я попрошу значение, ему их придется все перебрать
источник

JM

John Meow in Haskell Start
кана
nats n = n : nats (n + 1)

data IntList = Nil | Cons Int IntList

foldr f z [] = z
foldr f z (x:xs) = x `f` foldr f z xs

foldr Cons Nil (nats 0) =
0 `Cons` foldr Cons Nil (nats 1) =
0 `Cons` (1 `Cons` foldr Cons Nil (nats 2)) =
...


для любого этапа не важно, что там будет дальше, мы можем сматчить голову списка, то есть не обязательно вычислять весь список, чтобы получить первый элемент
И почему foldl на них тогда не работает?
источник

к

кана in Haskell Start
а вот пока не попросишь, не будет перебирать

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

isEmpty = foldr (\_ _ -> False) True

вот эта функция вообще не будет вычислять ни одного элемента, только проверит, какой конструктор, поэтому вернут False даже на бесконечном спислке
источник

JM

John Meow in Haskell Start
кана
а вот пока не попросишь, не будет перебирать

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

isEmpty = foldr (\_ _ -> False) True

вот эта функция вообще не будет вычислять ни одного элемента, только проверит, какой конструктор, поэтому вернут False даже на бесконечном спислке
Разве foldr после создания можно ограничить лист?
источник

к

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

JM

John Meow in Haskell Start
кана
а вот пока не попросишь, не будет перебирать

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

isEmpty = foldr (\_ _ -> False) True

вот эта функция вообще не будет вычислять ни одного элемента, только проверит, какой конструктор, поэтому вернут False даже на бесконечном спислке
Мне это непонятно. Не может быть Хаскель достаточно умным, чтобы понять, что после этого значение не будет меняться.
источник

к

кана in Haskell Start
так хаскель же еще и иммутабельный язык

мы в функции написали вернуть Cons x (foldr f z xs)
x уже никогда не меняется
источник