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
например (не факт что лучший вариант)
Антон
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 зопилить
Антон
Alexander
ну или handle (\e -> print (e::SomeException) >> pure Nothing)
Alexander
в любой непонятной ситуации аннотируй типы
Alexander
даже если плохо понимать что делает получившийся код скорее всего он будет корректно работать 👍
Антон
Антон
Блин, я хочу просто исключение перехватить
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 написал тебе четко ошибку, если скомбинировать с тем что я написал выше, то все получится
Alexander
Антон
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
ну хакадж из сорцов генерируется
Антон
Антон
Спасибо, @qnikst.
Alexander
нема за что
Sergey
Andrey
Сорри за оффтоп, но может тут есть аналоговые электронщики-любители? В каком простеньком софте (Альтиум дизайнер не предлагать), а лучшне онлайн вообще мне будет удобно разработать печатную плату для схемки на пару-четвекру десятков элементов?
Anton
Anton
(правда не совсем любители 😉 )
Andrey
просто я не хотел качать спец-софт и еще выбирать что работает на маке, думал есть какие-то известные онлайн-ресурсы - например онлайн компиляторов я немало знаю и использую.
Anton
может за последние лет 6-7 что-то поменялось, но в то время едиственный выбор ОС была Windows, если речь идет про инженерный софт
Anonymous
Денис
Как называется расширение в котором можно использовать ⤚ в типе?
Alexander
Денис
Там ещё что-то про проверку единственности использования аргумента было...
Kirill
в линейных типах ⊸
Kirill
@qnikst в аски оно ->. судя по https://www.tweag.io/posts/2018-03-08-linear-sort.html ?
Dmitry
Alexander
Alexander
вроде в ветку это замержили ужк
Alexander
Alexander
Сергей
Andrey
пасиб, я уже зарегился онлайн на easyEda - по интерфейсу похож на spice-LT, привычно )
parket
parket
Но лучше таки Altium, конечно.
parket
Sprint Layout
Это если пара десятков элементов. Но практика показала, что даже 10-ти элементные платки удобнее разводить в альтмуме. Ток библиотеку корпусов надо, чтоб самому не рисовать ( я её таки себе нарисовал, вроде )