Size: a a a

2020 October 30

ИБ

Иван Багринцев... in Haskell
.
Наверное, это самый боринг хаскель из всех боринг хаскелей.

lastFalse :: [a] -> [(a, Bool)]
lastFalse [] = []
lastFalse xxs@(_:xs) = go xxs xs
 where
   go (x:_) []       = [(x, False)]
   go (x:xxs) (_:xs) = (x, True) : go xxs xs
   go [] _           = error "Impossible"
Не, вот самый боринг. Даже без вспомогательных функций

lastFalse :: [a] -> [(a, Bool)]
lastFalse []     = [] -- либо заменить на то, как он себя должен вести при пустом списке
lastFalse [x]    = [(x, False)]
lastFalse (x:xs) = (x, True) : lastFalse xs
источник

KV

Kirill Valyavin in Haskell
кана
так это шо значит, на всем, на чем можно выразить что-то, писать не хуже, чем на этом чем-то?
Да, это именно то, что я имел в виду
источник

KV

Kirill Valyavin in Haskell
Вот например хаскель легко выражается на си, поэтому си лучше
источник

JS

Jerzy Syrowiecki in Haskell
на машине Тьюринга всё выражается, а она на Брэйнфаке (вроде бы)
источник

D

Dreamerinnoise in Haskell
источник

D

Dreamerinnoise in Haskell
Новая экскелета
источник

AV

Alexander Vershilov in Haskell
Я не знаю можно ли этот ад простить за то, что немного типов проверяется
источник

NI

Nick Ivanych in Haskell
Jerzy Syrowiecki
на машине Тьюринга всё выражается, а она на Брэйнфаке (вроде бы)
Давайте, всё-таки, придерживаться функционального программирования!
Поэтому, выбираем unlambda, а никакой не brainfuck.
источник

.

. in Haskell
Какие варианты может вывести подобный код?
main = do
 print "Hello, "
 throw e
 print "World"
 throw e
 print "!"
источник

.

. in Haskell
Надо заметить, что тут throw, а не throwIO поэтому ghc может решить их подвигать, как ему желается. Но насколько ему может желаться?
источник

AV

Alexander Vershilov in Haskell
Не может
источник

AV

Alexander Vershilov in Haskell
У тебя контекст IO
источник

AV

Alexander Vershilov in Haskell
если это из safe-exceptions, то там тот же MonadThrow c законом:
throwM e >> x = throwM e
источник

AV

Alexander Vershilov in Haskell
throw :: (C.MonadThrow m, Exception e) => e -> m a
throw = C.throwM . toSyncException
источник

AV

Alexander Vershilov in Haskell
throwIO = throw
источник

.

. in Haskell
Это обычный throw из base
источник

.

. in Haskell
И может, throw не консьюмит токен состояния
источник

.

. in Haskell
Тут что-то подобное разницы между unsafePerformIO, unsafeInterleaveIO и accursedUnutterablePerformIO.
источник

MK

Maxim Koltsov in Haskell
Попробуй кору сравнить с throwIO
источник

JS

Jerzy Syrowiecki in Haskell
.
И может, throw не консьюмит токен состояния
(>>=) @IO aka bindIO в первом аргументе матчит IO m. до токена дело не доходит даже
источник