@haskellru

Страница 154 из 1551
Vladimir
12.12.2016
21:16:45
Гениально

х-ль любишь? давай

That Guy
13.12.2016
20:10:07
Товарищи, подскажите аналог оператора ., действующий в обратную сторону (то есть если (f . g) x == f(g(x)), то (f +++ g) x == g(f(x))).

Короче, как это написать средствами стандартной библиотеки? f +++ g = g . f main = do n <- readLn arr <- getLine >>= (words +++ map read +++ return) putStrLn "hi"

Google
eugene
13.12.2016
20:14:32
f >>> g?

That Guy
13.12.2016
20:15:06
c.hs:13:27: error: • Variable not in scope: (>>>) :: (String -> [String]) -> ([String] -> [b0]) -> String -> a1 • Perhaps you meant one of these: ‘>>=’ (imported from Prelude), ‘>>’ (imported from Prelude)

eugene
13.12.2016
20:15:17
Control.Arrow

That Guy
13.12.2016
20:16:47
О, спасибо. Вот такое скомпилилось: import Control.Monad (liftM) import Control.Arrow ((>>>)) main = do n <- readLn :: IO Int a <- liftM (words >>> map read) getLine :: IO [Int] putStrLn "hi"

eugene
13.12.2016
20:17:08
??

That Guy
14.12.2016
11:01:15
Почему здесь import Control.Monad.ST (ST, runST) import Data.Array.ST (STArray, newArray, getElems) existsEmpty n = runST $ do arr <- newArray (1, n) [] :: ST s (STArray s Int [Integer]) -- какой-то длинный код return $ any mempty $ (getElems arr :: [[Integer]]) компилятор выдаёт ошибку Couldn't match type ‘[Integer]’ with ‘Integer’ Expected type: [[Integer]] Actual type: [[[Integer]]] • In the second argument of ‘($)’, namely ‘(getElems arr :: [[Integer]])’ ... ? Казалось бы, я инициализирую массив списков, и затем превращаю его в список списков. Откуда [[[Integer]]]?

That Guy
14.12.2016
12:17:06
incomming не присуствует в процитированном участке кода
Простите, забыл отредактировать ошибку компилятора

Alexander
14.12.2016
12:17:12
any :: Foldable t => (a -> Bool) -> t a -> Bool

Google
Alexander
14.12.2016
12:17:49
отсюда mempty :: (a -> Bool)

instance Monoid b => Monoid (a -> b)

getElems :: (MArray a e m, Ix i) => a i e -> m [e]

мне жалко компилятор ;)

any empty <$> getElems arr

наверное это имелось ввиду:?

That Guy
14.12.2016
12:21:04
any empty <$> getElems arr
:t empty <interactive>:1:1: error: • Variable not in scope: empty • Perhaps you meant ‘mempty’ (imported from Prelude)

Alexander
14.12.2016
12:21:24
:m +Data.List

я так понимаю ты хочешь увидеть, что какой-то из списков пустой

That Guy
14.12.2016
12:22:01
да

Alexander
14.12.2016
12:22:05
но mempty этого не делает, это 0 для моноида

хотя название и похоже

That Guy
14.12.2016
12:22:19
значение, а не предикат

ясно

отсюда mempty :: (a -> Bool)
хотя стоп, нет

Alexander
14.12.2016
12:23:11
там вообще все плохо с типами

That Guy
14.12.2016
12:23:25
:t mempty mempty :: Monoid a => a

Alexander
14.12.2016
12:23:35
и?

That Guy
14.12.2016
12:23:50
Вот это значение :)

Google
Alexander
14.12.2016
12:24:26
> но mempty этого не делает, это 0 для моноида

про чт я и говорил

но т.к. тип any :: (a -> Bool) -> t a -> Bool => этот конкретный mempty должен быть (a -> Bool)

в общем не важно

напиши правильно: any empty <$> getElems arr

That Guy
14.12.2016
12:26:33
existsEmpty :: Int -> [Int] -> Bool existsEmpty n g = runST $ do incoming <- newArray (1, n) [] :: ST s (STArray s Int [Int]) gg <- newSTRef g for_ [1..n] $ \idx -> do h:t <- readSTRef gg current <- readArray incoming h writeArray incoming h (idx:current) writeSTRef gg t elems <- getElems incoming return $ any null elems Такое работает

Alexander
14.12.2016
12:27:05
а точно

That Guy
14.12.2016
12:27:15
existsEmpty :: Int -> [Int] -> Bool existsEmpty n g = runST $ do incoming <- newArray (1, n) [] :: ST s (STArray s Int [Int]) gg <- newSTRef g for_ [1..n] $ \idx -> do h:t <- readSTRef gg current <- readArray incoming h writeArray incoming h (idx:current) writeSTRef gg t return $ any null <$> getElems incoming такое не проходит тайпчек с ошибкой: • Couldn't match type ‘f0 Bool’ with ‘Bool’ Expected type: ST s Bool Actual type: ST s (f0 Bool) • In a stmt of a 'do' block: return $ any null <$> getElems incoming

Alexander
14.12.2016
12:27:17
спать покра мне

any null <$> getElems

нафига временные байндинги вводить

почему return то?

Alexander
14.12.2016
12:28:08
return :: a -> m a

any null <$> getElems incomming :: ST s Bool

если сделать return $ .. то будет ST s (ST s Bool)

Quet
14.12.2016
12:30:19
как зачем? потому что из функции нужно вернуться… вот и return

очень удачное имя конечно в свое время выбрали они для монады (

Anatolii
14.12.2016
12:31:18
мне кажется если разбираться чуточку более основательно

то проблем с return не возникает

That Guy
14.12.2016
12:31:36
почему return то?
Потому что any выдаёт немонадное значение

Google
Anatolii
14.12.2016
12:31:48
просто обычно хочется сесть и за вечерок газануть сервис

без книжек и прочего

Alexander
14.12.2016
12:32:17
Потому что any выдаёт немонадное значение
я ещё раз повторюсь: any null <$> getElems incomming :: ST s Bool

<$> там не просто так

Anatolii
14.12.2016
12:32:28
<$> ты поднял это все в монаду

That Guy
14.12.2016
12:32:29
Да, я понял.

return там изначально был, потому что у меня был лишний байндинг

Alexander
14.12.2016
12:32:59
угу

кстати из-за этого ошибка про [[[]]] была

Admin
ERROR: S client not available

Alexander
14.12.2016
12:33:40
у ghc получилось вывести что оно сойдётся будет соотв тип у массива

кстати, есть ли причина по которой используется array, а не vector?

Alexander
14.12.2016
12:34:24
ну кроме того, что это задание в универе, а в системе проверки только ghc и либы идущие с ним

тогда советую брать vector

That Guy
14.12.2016
12:34:50
Это не задание в универе, это http://codeforces.com/contest/742/problem/C

Но замечание про систему проверки по-прежнему актуально

Timothy
14.12.2016
13:54:44
hah, еще не было ссылки http://simonmar.github.io/posts/2016-12-08-Haskell-in-the-datacentre.html ?

That Guy
14.12.2016
14:19:23
ну кроме того, что это задание в универе, а в системе проверки только ghc и либы идущие с ним
На сервере Codeforces (GHC 7.8.3) в Prelude нет даже <$>. (У меня локально 8.0.1, там есть.)

Alexander
14.12.2016
14:20:03
import Control.Applicative import Prelude и будет на всех ghc без warning-ов работать

Google
Alexander
14.12.2016
14:20:26
на многих системах ставят популярные либы

That Guy
14.12.2016
14:21:35
А как перекрыть импортированный из Prelude символ?

Нашёл. import hiding

Товарищи, не мог бы кто-то мне сделать code review? http://codeforces.com/contest/742/submission/22950482

Alexander
14.12.2016
14:26:51
а какие символы надо было спрятать?

That Guy
14.12.2016
14:27:36
<$> из Prelude, чтобы локально компилировалось

Alexander
14.12.2016
14:27:52
оно реэкспортирует же

import Control.Applicative import Prelude вот именно так будет работать без ворнингов

т.е. из Applicative не явно, а импорт Prelude после

f <$> a = do t <- a return $ f t нинада так, нужно или нормальный или fmap

That Guy
14.12.2016
14:29:19
Почему два импорта на один символ?

Alexander
14.12.2016
14:29:45
чтобы не было warning-ов на версиях д AMP и после

просто забавный хак, использующий правила того, как работают warning-и на redundant import

import Control.Applicative <- благодаря этому работает на <7.10

import Prelude <- благодаря этому не генерируется warning на >=7.10

whileM p f = do { x <- p; when x (f » whileM p f) }

т.е. там как-то слишком много строчек

That Guy
14.12.2016
14:32:36
http://codeforces.com/contest/742/submission/22950581 Теперь у меня локально выдаётся warning, что Module ‘Control.Monad.ST.Safe’ is deprecated, но иначе это не компилируется на сервере с ошибкой Control.Monad.ST: Can't be safely imported! The module itself isn't safe.

Alexander
14.12.2016
14:33:04
посмотри документацию, что использовать взамен

я на память не скажу, никогда его не импортирова

That Guy
14.12.2016
14:33:33
GHC 8.0.1 локально при компиляции с Safe: Module ‘Control.Monad.ST.Safe’ is deprecated: Safe is now the default, please use Control.Monad.ST instead GHC 7.8.3 на сервере без Safe: program.hs:6:1: Control.Monad.ST: Can't be safely imported! The module itself isn't safe. program.hs:7:1: Data.Array.ST: Can't be safely imported! The module itself isn't safe.

Alexander
14.12.2016
14:34:17
что мешает последовать совету?

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