Size: a a a

2021 March 08

JS

Jerzy Syrowiecki in Haskell
Сергей
то что неизменяемое копируется дешево как референсы
проход до нужного места требует O(n) времени, а также копирование всех ссылок от головы до нужного места
источник

JS

Jerzy Syrowiecki in Haskell
Dmitrii Skurikhin
пошёл читать про ST, спасибо
в ST нет мутабельного аналога именно списка, но можно внутри ST построить из списка вектор, помутить с ним, потом выдать новый список
источник

JS

Jerzy Syrowiecki in Haskell
Dmitrii Skurikhin
1 раз только копировать в том, что идёт на экспорт
а хотя, если на выходе из функции нет ссылки на промежуточный объект, то да, можно.

но с экспортом из модуля это никак не связано
источник

V

Vladimir in Haskell
Здравствуйте, почему ругается на redundant patternMatch?
источник

V

Vladimir in Haskell
источник

к

кана in Haskell
а там есть еще какие-нибудь конструкторы у типа?
источник

A

Aleksandr Khristenko in Haskell
А зачем он? Ты же вроде все конструкторы использовал
источник

к

кана in Haskell
data Bool = True | False

not x = case x of
 True -> False
 False -> True
 _ -> False -- избыточно, ничего кроме двух конструкторов выше быть не может

можно просто

not x = case x of
 True -> False
 False -> True
источник

V

Vladimir in Haskell
Да, точно, спасибо
источник

A

Aleksandr Khristenko in Haskell
Vladimir
Да, точно, спасибо
А вообще мне кажется _ в таком виде стоит избегать. Ибо потом на рефакторинге при добавлении конструкторов не ловится.
источник

[

[BRM]White Rabbit in Haskell
моноиды, нужны для соединения множества сущностей в одну по заранее заданным правилам?..
источник

K

Kir in Haskell
[BRM]White Rabbit
моноиды, нужны для соединения множества сущностей в одну по заранее заданным правилам?..
Моноиды - это когда есть ноль mempty и бинарная операция <>, такие что
1) (a <> b) <> c == a <> (b <> c)
2) mempty <> a == a
2) a <> mempty == a

Строго говоря,

class Semigroup x where
 (<>) :: x -> x -> x

class Semigroup x => Monoid x where
 mempty :: x
источник

[

[BRM]White Rabbit in Haskell
про это я уже прочитал, ахах
Я просто про более прозаичное применение
источник

K

Kir in Haskell
Есть моноид над списками, который их объединяет, есть над Set и Map, есть моноид над First (всегда возвращает левый аргумент), есть моноид над кортежем (объединяет элементы попарно), есть моноид над функциями, возвращающими моноид (он запускает обе функции с одним аргументом и возвращает <> от результата. Ещё он вызывает лютую ненависть у некоторых представителей этого чата).
источник

K

Kir in Haskell
[BRM]White Rabbit
про это я уже прочитал, ахах
Я просто про более прозаичное применение
А прозаичное - это когда есть пустой элемент, и надо как-то объединить список неким оператором, и не важно, как в этом выражении a <> b <> c <> ... <> z расставлены скобки
источник

A

Andrey in Haskell
Kir
Есть моноид над списками, который их объединяет, есть над Set и Map, есть моноид над First (всегда возвращает левый аргумент), есть моноид над кортежем (объединяет элементы попарно), есть моноид над функциями, возвращающими моноид (он запускает обе функции с одним аргументом и возвращает <> от результата. Ещё он вызывает лютую ненависть у некоторых представителей этого чата).
Потому что они ожидают композицию в качестве <>?
источник

K

Kir in Haskell
Andrey
Потому что они ожидают композицию в качестве <>?
Кто - они?
источник

A

Andrey in Haskell
Kir
Кто - они?
Люди из последнего предложения
источник

K

Kir in Haskell
Andrey
Люди из последнего предложения
Вот не знаю. Я его применял, и случайно это заметил, когда делал foldMap в функцию, поэтому решил упомянуть.
источник

A

Andrey in Haskell
На самом деле это просто прямое произведение семейства моноидов
источник