-
2023-01-08 22:37:33+00:00
тут не про тс язык
-
2023-01-08 22:37:29+00:00
в названии чата
-
2023-01-08 22:35:39+00:00
какой язык в шапке?
-
2023-01-08 22:34:21+00:00
че?
-
2023-01-08 12:46:53+00:00
По идрису есть книга Брейди
-
2023-01-08 12:43:20+00:00
Вот этот доклад понравился: https://www.youtube.com/watch?v=AWeT_G04a0A
-
2023-01-08 12:40:10+00:00
Интересно!
-
2023-01-08 12:39:25+00:00
Спасибо, чуть более понял!
-
2023-01-08 12:39:24+00:00
https://github.com/natefaubion/purescript-convertable-options
?
-
2023-01-08 12:38:43+00:00
Это аналог занесения row в параметры, в реальности там ConverTo a b c d e получается условно, и есть другие классы, от этого ConvertTo зависящие, туда всю эту череду параметров тоже прокинуть придётся, лучше конкретные row тогда уж, в других параметрах проблемы не должно быть, они могут быть forall
-
2023-01-08 12:35:56+00:00
fundep не обязательно, если не надо зависимость
-
2023-01-08 12:35:18+00:00
ага, его видел тоже
-
2023-01-08 12:35:11+00:00
а не просто record
-
2023-01-08 12:35:06+00:00
правда у меня record-studio
-
2023-01-08 12:33:44+00:00
я не знаю что там хочешь, но вот
class ConvertTo a x | a -> x where
convert :: a -> x
newtype Wrapper (row :: Row Type) = Wrapper (Record row)
instance (RL.RowToList row rl, Record.Keys row) => ConvertTo (Wrapper row) (Array String) where
convert :: Wrapper row -> Array String
convert (Wrapper _) = Record.keys (Proxy :: _ row)
а вообще посмотри на purescript-convertable-options
-
2023-01-08 12:31:13+00:00
не сделать, если он в forall row. для convert, вне скоупа получается
-
2023-01-08 12:28:16+00:00
тогда и без Wrapper можно было бы обойтись
-
2023-01-08 12:27:38+00:00
Record.keys ещё работает с Proxy, но в инстансе получается row недоступен, не сделать Record.keys (Proxy :: Proxy row)
-
2023-01-08 12:26:19+00:00
Но похоже придётся вынести
-
2023-01-08 12:25:35+00:00
Просто давно ковыряю, row в параметры выносить не хочется, их ещё и несколько, unsafeCoerce не помогает потому что констрейнты вложенные
-
2023-01-08 12:24:42+00:00
Тоже в оригинале посложнее
-
2023-01-08 12:24:17+00:00
https://t.me/purescript_ru/11456 тут
-
2023-01-08 12:23:53+00:00
Есть более сложный data у которого этот row внутри, это я для примера сделал минималистично
-
2023-01-08 12:23:30+00:00
и где код для ConvertTo?
-
2023-01-08 12:22:24+00:00
зачем Wrapped?
-
2023-01-08 12:20:10+00:00
^
-
2023-01-08 12:19:51+00:00
Если row включить в параметры класса, то работает
-
2023-01-08 12:19:02+00:00
Пришёл к этому из такого:
Есть функция из heterogenous maps:
keys :: forall g row rl
. RL.RowToList row rl
=> Keys rl
=> g row -- this will work for any type with the row as a param!
-> List String
И есть такой пример инстанса класса выше (с forall в "методе"):
newtype Wrapper (row :: Row Type) = Wrapper (Record row)
instance ConvertTo (List String)
where
convert
:: RL.RowToList row rl
=> Record.Keys rl
=> Wrapper row
-> List String
convert (Wrapper row) = Record.keys row
Компилятор говорит:
No type class instance was found for
Prim.RowList.RowToList row0 t2
-
2023-01-08 12:11:16+00:00
Прояснилось немного, спасибо!
-
2023-01-08 03:29:19+00:00
Неявно подставь сигнатуру класса как констрейн к соответствующей функции.
Вторая связывает два переменных типа (для них должен быть объявлен инстанс), первая ставит ограничение на x (должен быть в классе ConvertTo), но a при этом должен приниматься любой (потому что forall).
-
2023-01-08 02:00:34+00:00
Например про разницу между
class ConvertTo x where
convert :: forall a. a -> x
И
class ConvertTo a x where
convert :: a -> x
Если нет констрейнтов, то они могут и одинаково работать, а вот если есть констрейнты на a, то инстансы для первого случая компилятору не нравятся
-
2023-01-08 01:55:57+00:00
А где-то есть что-то дружелюбное почитать про разницу между ’forall.` на разных уровнях? Ну типа Array (forall a. a), это же не гетероморфный массив? И про экзистенциальные типы не до конца тоже понимаю. Вот всякое про зависимые типы в Idris понимаю, эксплицитные и имплицитные, может аналогия какая есть?
-
2023-01-18 16:51:13+00:00
этот чат не про это
-
2023-01-20 22:46:16+00:00
row polymorphism, type in type