Size: a a a

2021 January 02

TZ

Timofey Zakrevskiy in Haskell Start
Aragaer
при этом первый стринг должен быть repo, а второй name. Как мне защититься от того, чтобы случайно перепутать порядок?
Ньютайпы?
источник

A

Aragaer in Haskell Start
ну вобщем да, поскольку один без другого не имеет смысла, наверно named
источник

A

Aragaer in Haskell Start
ну или вообще переделаю все чтобы структуру передавать
источник

к

кана in Haskell Start
ньютайпы в общем-то тоже отличный варик, named в данном случае это просто обобщение всех таких ньютайпов, которые обычно создаются для параметров
источник

A

Aragaer in Haskell Start
делаю сейчас везде в коде data Image = Image {getRepo::String, getName::String}
источник

A

Aragaer in Haskell Start
А вот если у меня есть StateT MyState IO, то есть какое-нибудь чудесное средство, чтобы не надо было писать liftIO на каждый putStrLn?
источник

к

кана in Haskell Start
да,

putStrLn :: MonadIO m => String -> m ()
putStrLn = Prelude.putStrLn . liftIO
источник

к

кана in Haskell Start
есть несколько кастомных прелюдий, в которых уже сделано так для многих io функций из base
источник

к

кана in Haskell Start
источник

A

Aragaer in Haskell Start
то есть мне надо другую прелюдию поставить, а стандартную убрать?
источник

A

Aragaer in Haskell Start
а, еще у меня есть putStrLn из Data.ByteString.Char8 и Data.ByteString.Char8.Lazy
источник

к

кана in Haskell Start
Aragaer
то есть мне надо другую прелюдию поставить, а стандартную убрать?
не надо, а можно. А можно просто у себя определить локально в каком-нибудь модуле эти функции, и использовать их
источник

A

Aragaer in Haskell Start
class MPrint a where
 putStrLn :: MonadIO m => a -> m ()

instance MPrint String where
 putStrLn = liftIO . Prelude.putStrLn

instance MPrint S8 where
 putStrLn = liftIO . C8.putStrLn

instance MPrint S8L where
 putStrLn = liftIO . C8L.putStrLn
источник

A

Aragaer in Haskell Start
работает, но спотыкается об литералы
источник

к

кана in Haskell Start
есть один хак для решения этой проблемы, ща
источник

к

кана in Haskell Start
в общем трюк выглядит примерно так
источник

к

кана in Haskell Start
вроде бы можно как-то без INCOHERENT это сделать, оверлапами, но я не смог сейчас этого сделать
источник

к

кана in Haskell Start
закоментированный вариант будет точно так же ругаться на то, что не ясно, какой тип у 10
источник

A

Aragaer in Haskell Start
ага, сработало
источник

A

Aragaer in Haskell Start
class MPrint a where
 putStrLn :: MonadIO m => a -> m ()

instance {-# INCOHERENT #-} a ~ String => MPrint a where
 putStrLn = liftIO . Prelude.putStrLn

instance MPrint S8 where
 putStrLn = liftIO . C8.putStrLn

instance MPrint S8L where
 putStrLn = liftIO . C8L.putStrLn
источник