Alexander
я правильно понимаю что оно вернет последний символ тогда?
Cheese
нет
Дмитрий
Кто ещё не любит писать такие фильтры предпочитает расписывать в столбик?
Cheese
почему последний?
Cheese
вернёт список объектов, которые могут распарситься из полной строки
Дмитрий
[a| a <- [1..6]] => [1,2,3,4,5,6]
Дмитрий
Тут будет тоже.
Дмитрий
А не последний, пятый или десятый.
Cheese
runParser p s = [x | (x, "") <- runStateT p s]
в этой строчке нет монад, это просто проход по списку
Cheese
список как настоящая монада только внутри p
Alexander
я все равно не вкуриваю. Что вернет runStateT? На примере строки "12345". Почему не [('1', "2345")]
Cheese
да, ввобще список — монада, но в этой строчке особые монадические свойства списка не используются
Дмитрий
Alexander
ну они явно используются под капотом runStateT
Cheese
runStateT вернёт, например, [(FooBar, ""), (Foo, "bar"), (Empty, "foobar")]
Alexander
тогда получается что фильтр пройдёт только [(FooBar, "")]
Cheese
не знаю, что ты называешь капотом, но runStateT тут на поверхности
Cheese
Alexander
так получается что только первый элемент?
Cheese
нет, только правильные элементы
Cheese
может, первый, может, последний, может, вообще все
Alexander
я запустил, не вернуло ни одного
Alexander
интересный пример
Alexander
я то думал что не так с ним
Alexander
ошибки в доке, 10/10
Alexander
и да,
*Main> runStateT item "12345"
[('1',"2345")]
Alexander
а куда им написать про ошибку?
Alexander
в общем написал письмо мейнтейнеру :(
Cheese
там разве написано, что runParser должен работать с item?
Alexander
а я откуда item взял?
Alexander
➜ /tmp cat ex.hs
import Control.Monad.Trans.State
type Parser = StateT String []
runParser :: Parser a -> String -> [a]
runParser p s = [x | (x, "") <- runStateT p s]
item :: Parser Char
item = do
c:cs <- get
put cs
return c
main :: IO ()
main = do
print $ runParser item "12345"
print $ runStateT item "12345"
➜ /tmp runhaskell ex.hs
""
[('1',"2345")]
Cheese
Cheese
там в документации 2 функции, но не написано, что надо одну в другую засовывать непосредственно
Cheese
λ> runStateT (many item) "12345"
[("12345",""),("1234","5"),("123","45"),("12","345"),("1","2345"),("","12345")]
λ> runParser (many item) "12345"
["12345"]
Alexander
ну такое себе для документации
Alexander
все равно
Cheese
предложи дописать пример с many
Cheese
опенсорс, слава богу
Alexander
ну да, как вариант
Leonid 🦇
бэкэндсикрет аж больно читать.
Denis
а что там?
Leonid 🦇
Требуют IDE, потому что без них нельзя писать на их любимых ЯП, ибо там IDE заменяют то что дают более абстрактные абстракции
Leonid 🦇
там Шевченко
A64m
иде не заменяют абстракции, иде делают навигацию по коду и облегчают знакомство с ним. Вообще, на "их любимых ЯП" кода больше, так что и иде нужнее, но уже и на хаскеле не только факториалы с фибоначами пишут
Leonid 🦇
ну так не две же крайности - жет брейнсовые IDE vs notepad
Leonid 🦇
Емакс вполне норм
Leonid 🦇
хаскель-моде, хасктагс, стайлиш-хаскель (если hse может попарсить)
Leonid 🦇
хлинт и флайчек
Leonid 🦇
Вроде в ваших игрушечные VSCode тоже всё это есть
Leonid 🦇
чего еще надо то?
A64m
даже этот минимальный набор нормально не работает
Leonid 🦇
ну как может, так и работает.
A64m
никак не может
Leonid 🦇
Что же теперь, на яве писать что-ли из-за этого?
A64m
нет
Алексей
Хаскель-моде работает. Хасктагс работает, но криво до ужаса
Leonid 🦇
ну rgrep по проекту тоже норм, чо
Alexander
the_silver_searcher
A64m
хасктагс не парсит хаскель, также интересную навигацию одним парсером не сделать, еслиб он и был
Dmitry
Ripgrep
Leonid 🦇
intero без стака не пашет же, так что мне не вариант
Dmitry
Пока единственное, что у меня работало в вскоде надежно - это кнопка «вставить сигнатуру»
Dmitry
2 из 2
A64m
интеро и прочие основанные на ghci костыли без кеширования просто не работают ни на чем кроме факториалов
A64m
ну, т.е. могут и сравботать, но за комично громадный промежуток времени
Алексей
Не парсит хаскелль надо понимать как парсит 90+% процетов кода
parket
Leonid 🦇
В общем смысл в том что у вас МОДУЛЬНОСТЬ и низкая СВЯЗАНОСТЬ кода, и вам в любой момент не надо в голове держать всё
Alex
A64m
ох, опять это грепанье.
нагрепайте инстансы вот для этих fmap
fmap `fmap` fmap
что? не грепаются?
Leonid 🦇
ну так и пиши на ЯП с IDE, чего же от нас то хочешь?
Leonid 🦇
Leonid 🦇
Никто не говорит что ИДЕ плохо, мы лишь говорим что ИДЕ не обязательно
A64m
да и хаскель не обязателен
Leonid 🦇
не надо уравнивать сразу всё
Leonid 🦇
давай в профите считать