
Alexander
19.10.2018
18:12:38
какими-то сложными stage-ами

kana
19.10.2018
18:13:11
словарики-инстансы мб

A64m
19.10.2018
18:14:52
Одно время был прямо модуль GHC.IP, но потом пропал

kana
19.10.2018
18:20:09
почему такое работает
data F a = F a
class C x
instance C F
newtype G a = G { unG :: forall f. F (f a) }
deriving C

Google

kana
19.10.2018
18:20:22
newtype f ~> g = Nat { runNat :: forall x. f x -> g x }
deriving Category
а такое нет

Denis
19.10.2018
18:21:39

Alexander
19.10.2018
18:23:17
а у f x -> g x разве есть инстанс category?

Denis
19.10.2018
18:23:37
это же уже 2 категории?

Alexander
19.10.2018
18:23:52
(->) есть

Denis
19.10.2018
18:24:05
функторы - объекты
нат преобразования - морфизмы

Alexander
19.10.2018
18:24:09
но тут же kind другой, если я верно понимаю

kana
19.10.2018
18:25:02

Alexander
19.10.2018
18:25:41
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Control.Category
newtype Z a b = N (a -> b)
deriving (Category)
работает
как ожидается
сейчас посмотрю про выше
ну конечно, у тебя же у F для любого параметра есть инстанс C

Google

Alexander
19.10.2018
18:26:38
я думаю через via как-то можно добиться второго

kana
19.10.2018
18:26:51
так и у (->) для любых параметров есть Category
я пока не понимаю разницы

Dmitry
19.10.2018
18:27:42
Как будет выглядеть композиция для (~>)?

kana
19.10.2018
18:27:59
instance Category (~>) where
id = Nat id
(.) (Nat f) (Nat g) = Nat (f . g)

Oleg
19.10.2018
18:28:00
нет?
class Category (C :: Type -> Type -> Type)

kana
19.10.2018
18:28:47

Dmitry
19.10.2018
18:28:55

kana
19.10.2018
18:28:58

Dmitry
19.10.2018
18:29:34
Странно, как я понимаю, он не должен компилироваться. Проверю.

kana
19.10.2018
18:29:36
я просто хочу заменить бойлерплейтный инстанс на генерацию

Oleg
19.10.2018
18:29:42
А у тебя
class Category1 (c :: (Type -> Type) -> (Type -> Type) -> Type)
Полиморфный тобишь

kana
19.10.2018
18:30:24
тут дело не реальности инстанса, выше я написал валидный инстанс, который спокойно скомпилируется
вопрос в его генерации

Google

Oleg
19.10.2018
18:31:26
можт оно тоже полимофное получается?

Alexander
19.10.2018
18:32:02
3.hs:6:13: error:
• Cannot derive well-kinded instance of form ‘Category (Z ...)’
Class ‘Category’ expects an argument of kind ‘* -> * -> *’
• In the newtype declaration for ‘Z’

Oleg
19.10.2018
18:32:07
и типа он не может вывести Higher Ranked Kind?

Dmitry
19.10.2018
18:32:26

kana
19.10.2018
18:33:00
а так да, он f выводил как k -> Type
но это не помогает, все равно не выводит

Alexander
19.10.2018
18:34:44
• Can't make a derived instance of ‘Category Z’
(even with cunning GeneralizedNewtypeDeriving):
cannot eta-reduce the representation type enough

kana
19.10.2018
18:35:40

Dmitry
19.10.2018
18:36:42
Да, я ступил.

Alexander
19.10.2018
18:38:38
newtype Q x f g = Q (f x -> g x)
instance Category (Q x) where
id = Q id
Q a . Q b = Q (a.b)
newtype Z f g = Z (forall x . Q x f g)
deriving (Category)
даже так не хочет

Denis
19.10.2018
18:39:50

Alexander
19.10.2018
18:40:00
я не умею, и надо компилятор ставить
хотя надо попробовать

A64m
19.10.2018
18:52:46
а если импредикатив тайпс включить?

Google

Denis
19.10.2018
18:55:46

Alexander
19.10.2018
19:01:15
ааа
"{\"solution\":[1]} ^? key "solution" . _JSON :: Maybe [Int] выдает Nothing
почему?
тип точно правильный, проверил в рантайме

A64m
19.10.2018
19:03:51
хм

Alexander
19.10.2018
19:04:36
хм.. а в консольке все ок

Imants
19.10.2018
19:04:54

Alexander
19.10.2018
19:05:03
да
похоже ghc где-то плохо генерирует код
и я его сломал
щас соберу пример

Yuriy
19.10.2018
19:08:28

Alexander
19.10.2018
19:08:51
key мне уже fromJSON вернёт?

Yuriy
19.10.2018
19:09:21
хм

Alexander
19.10.2018
19:09:31
мне нужно из Value получить моё a
key :: AsValue t => Text -> Traversal' t Value
_JSON :: (FromJSON a, ToJSON a) => Prism' t a

Yuriy
19.10.2018
19:13:02
λ> "{\"solution\":[1]}" ^? key "solution" . _JSON :: Maybe [Int]
Just [1]
ЧЯДНТ?

Alexander
19.10.2018
19:13:26

Google

Alexander
19.10.2018
19:13:31
ты используешь пример, который ещё не демонтстрирует проблему
сейчас соберутся линзы вне проекта, попрбую мимимальный пример кринуть

Yuriy
19.10.2018
19:18:05

Alexander
19.10.2018
19:18:30
что ты этим хочешь сказать?

Yuriy
19.10.2018
19:18:52
что я зануда
извините

Alexander
19.10.2018
19:19:27
я скопировал из библиотеки сигнатуру

Yuriy
19.10.2018
19:20:13
эта сигнатура внутри класса
но это не решает твою проблему

Alexander
19.10.2018
19:20:59
опа
а почему у меня AsJSON не хочет тайпчеккер в реальном проекте
туплю
блин.. что-то не понимаю
а!
в программе "\"{solution:[1]\"" превращается в String ...
логично что key его не парсит
но почему в ghci не так?
*Main> :list v
23 v :: Value
24 v = "{\"solution\":[1]}"
25
*Main> v
String "{\"solution\":[1]}"

Yuriy
19.10.2018
19:27:35
а, String::Object?