Size: a a a

2020 July 11

VY

Vasiliy Yorkin in Haskell
a, nvm, похоже нашел: --repl-options
источник
2020 July 12

AP

Anatolii Prylutskyi in Haskell
Пытаюсь вот такой тайпкласс сделать:
class Action x a where
 send :: (MonadIO m , IsLabel x (r -> TQueue a) , MonadReader r m) => a -> m ()
 send act = do
   chan <- asks (getField @x)
   atomically $ writeTQueue chan act


но что-то не омгу компилятор побороть
источник

AP

Anatolii Prylutskyi in Haskell
Идея в том что у меня в окружении есть разные TChan и разные Action которые я по ним передаю
источник

AP

Anatolii Prylutskyi in Haskell
хочется для нового action описывать инстанс с лэйблом и использовать send для всех
источник

AP

Anatolii Prylutskyi in Haskell
Типа такого хочется по итогу делать
instance Action "chanFieldName" SomeAction where
источник

AP

Anatolii Prylutskyi in Haskell
так можно реализовать или я что-то не в ту сторону копать начал?
источник

MK

Maxim Koltsov in Haskell
А getField это что?
источник

MK

Maxim Koltsov in Haskell
Откуда?
источник

AP

Anatolii Prylutskyi in Haskell
забыл ошибки компиляции приложить
library/IDCar/Action.hs:13:3-80: error:
   • Could not deduce (Action x0 a)
     from the context: (Action x a, MonadIO m,
                        IsLabel x (r -> TQueue a), MonadReader r m)
       bound by the type signature for:
                  send :: forall (x :: ghc-prim-0.5.3:GHC.Types.Symbol) a (m :: *
                                                                                -> *) r.
                          (Action x a, MonadIO m, IsLabel x (r -> TQueue a),
                           MonadReader r m) =>
                          a -> m ()
       at library/IDCar/Action.hs:13:3-80
     The type variable ‘x0’ is ambiguous
   • In the ambiguity check for ‘send’
     To defer the ambiguity check to use sites, enable AllowAmbiguousTypes
     When checking the class method:
       send :: forall (x :: ghc-prim-0.5.3:GHC.Types.Symbol) a (m :: *
                                                                     -> *) r.
               (Action x a, MonadIO m, IsLabel x (r -> TQueue a),
                MonadReader r m) =>
               a -> m ()
     In the class declaration for ‘Action’
  |
13 |   send :: (MonadIO m , IsLabel x (r -> TQueue a) , MonadReader r m) => a -> m ()
  |   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
источник

MK

Maxim Koltsov in Haskell
Кажется тебе надо fromLabel использовать?
источник

AP

Anatolii Prylutskyi in Haskell
ща скажу
источник

MK

Maxim Koltsov in Haskell
ScopedTypeVariables включены?
источник

AP

Anatolii Prylutskyi in Haskell
хм
источник

AP

Anatolii Prylutskyi in Haskell
включены
источник

AP

Anatolii Prylutskyi in Haskell
fromLabel мне наверное не подойдет
источник

AP

Anatolii Prylutskyi in Haskell
я тоже на них подумал сначала
источник

MK

Maxim Koltsov in Haskell
А если включить AllowAmbiguousTypes как он предлагает что будет?
источник

AP

Anatolii Prylutskyi in Haskell
library/IDCar/Action.hs:17:19-29: error:
   • Cannot apply expression of type ‘t1’
     to a visible type argument ‘x’
   • In the first argument of ‘asks’, namely ‘(getField @x)’
     In a stmt of a 'do' block: chan <- asks (getField @x)
     In the expression:
       do chan <- asks (getField @x)
          atomically $ writeTQueue chan act
  |
17 |     chan <- asks (getField @x)
  |                   ^^^^^^^^^^^
источник

MK

Maxim Koltsov in Haskell
Хм, эта ошибка обычно значит что getField нет в скопе вроде
источник

AP

Anatolii Prylutskyi in Haskell
так
источник