Alexander
Но вообще, это очень здорово, что стримят
Антон
это ответило на твой вопрос?
Точно, принимает же IO аргументом. Проблема в том, что вот так не работает: handle print $ return $ headPrelude emp
Alexander
а что пишет?
Alexander
смотри, тип a у handle у тебя какой
Alexander
из print следует, что (), из headPrelude, что a
Антон
Couldn't match type ‘Int’ with ‘()’ Expected type: [()] Actual type: [Int] In the first argument of ‘headPrelude’, namely ‘emp’ In the second argument of ‘($)’, namely ‘headPrelude emp’
Alexander
во, ghc это и написал
Alexander
handle (fmap (const Nothing) . print) (Just <$> pure (headPrelude emp)
Alexander
например (не факт что лучший вариант)
Антон
handle (fmap (const Nothing) . print) (Just <$> pure (headPrelude emp)
А так жалуется на type variable is ambiguos
Alexander
больше информации :)
Антон
source_file.hs:21:5: No instance for (GHC.Exception.Exception a0) arising from a use of ‘handle’ The type variable ‘a0’ is ambiguous Note: there are several potential instances: ... source_file.hs:21:36: No instance for (Show a0) arising from a use of ‘print’ The type variable ‘a0’ is ambiguous Note: there are several potential instances: ...
Антон
И перечисляет все известные инстансы для Show и Exception
Alexander
ну логично
Alexander
какой тип у handle?
Alexander
handle :: Exception e => (e -> IO a) -> IO a -> IO a
Alexander
из print следует что e Exception e, Show e
Alexander
и как ему вывести что там именно?
Alexander
print @ SomeException например
Alexander
или handleSome зопилить
Антон
print @ SomeException например
У меня тут GHC 7.10 :(
Антон
или handleSome зопилить
С конкретными аннотациями типа?
Alexander
ну или handle (\e -> print (e::SomeException) >> pure Nothing)
Alexander
в любой непонятной ситуации аннотируй типы
Alexander
даже если плохо понимать что делает получившийся код скорее всего он будет корректно работать 👍
Антон
ну или handle (\e -> print (e::SomeException) >> pure Nothing)
Not in scope: type constructor or class ‘SomeException’
Антон
Блин, я хочу просто исключение перехватить
Alexander
ну import Control.Exception
Alexander
откуда catch-то у тебя
Антон
ну import Control.Exception
Да, я только handle импортил. Но сейчас имппортировал весь модуль и всё равно: source_file.hs:20:75: Couldn't match type ‘Int’ with ‘IO (Maybe a)’ Expected type: [IO (Maybe a)] Actual type: [Int] Relevant bindings include main :: IO (Maybe a) (bound at source_file.hs:17:1) In the first argument of ‘headPrelude’, namely ‘emp’ In the second argument of ‘($)’, namely ‘headPrelude emp’
Alexander
GHC написал тебе четко ошибку, если скомбинировать с тем что я написал выше, то все получится
Антон
handle (\e -> print (e::SomeException) >> pure Nothing) . return . Just $ headPrelude emp Работает, но ничего не печатает
Alexander
а что оно должно напечатать?
Антон
Или так и должно быть?
Alexander
я не знаю, я объясняю ошибки компилятора и как от них избавиться
Alexander
я вижу, что тут оно должно печатать исключение, но это не точно
Alexander
т.к. ты делаешь return Just, а не evaluate
Alexander
моэтому ты вернёшь thunk, и исключение вылетит вне handle блока
Alexander
вообще в Control.Exception очень неплохая документация я скажу
Alexander
а в Control.Monad.Trans.Except еще лучше (на правах оффтопика)
Alexander
print =<< handle (\e -> print (e::SomException) >> pure Nothing) (Just <$> evaluate (headPrelude emp)
Alexander
вот код, который напечатает что-то
Alexander
не факт что то, что надо т.к. это будет Exception \n Nothing в случае исключения
Alexander
в Except хуже документация, чем в Control.Exception
Alexander
ещё оно не расскажет, как пользоваться расширяемыми исключениями
Alexander
ну напиши, чтобы печатало что надо
Alexander
вообще в base документация очень хороша
Alexander
но есть ощущение, что её особо не читают : (
Антон
Alexander
hackage
Alexander
ну хакадж из сорцов генерируется
Антон
print =<< handle (\e -> print (e::SomException) >> pure Nothing) (Just <$> evaluate (headPrelude emp)
Хм, а если убрать `print =«`из начала, то только сообщение печатает
Антон
Спасибо, @qnikst.
Alexander
нема за что
Sergey
Это новая фишка передовых разработчиков - стримить Haskell?
просто стримить модно. bitemyapp вот rust стримит
Andrey
Сорри за оффтоп, но может тут есть аналоговые электронщики-любители? В каком простеньком софте (Альтиум дизайнер не предлагать), а лучшне онлайн вообще мне будет удобно разработать печатную плату для схемки на пару-четвекру десятков элементов?
Anton
(правда не совсем любители 😉 )
Andrey
просто я не хотел качать спец-софт и еще выбирать что работает на маке, думал есть какие-то известные онлайн-ресурсы - например онлайн компиляторов я немало знаю и использую.
Anton
может за последние лет 6-7 что-то поменялось, но в то время едиственный выбор ОС была Windows, если речь идет про инженерный софт
Денис
Как называется расширение в котором можно использовать ⤚ в типе?
Денис
Там ещё что-то про проверку единственности использования аргумента было...
Kirill
в линейных типах ⊸
Kirill
@qnikst в аски оно ->. судя по https://www.tweag.io/posts/2018-03-08-linear-sort.html ?
Alexander
вроде в ветку это замержили ужк
Alexander
Как называется расширение в котором можно использовать ⤚ в типе?
вот прям этот символ врятли а вообще UnicodeSyntax
Денис
в линейных типах ⊸
Точно! Спасибо, это я искал, только стрелку перепутал.
Alexander
Точно! Спасибо, это я искал, только стрелку перепутал.
нужно или докер контейнер брать или лучше самому собирать ветку только
Andrey
пасиб, я уже зарегился онлайн на easyEda - по интерфейсу похож на spice-LT, привычно )
parket
Но лучше таки Altium, конечно.
parket
Sprint Layout
Это если пара десятков элементов. Но практика показала, что даже 10-ти элементные платки удобнее разводить в альтмуме. Ток библиотеку корпусов надо, чтоб самому не рисовать ( я её таки себе нарисовал, вроде )