@haskellru

Страница 1536 из 1551
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
newtype f ~> g = Nat { runNat :: forall x. f x -> g x } deriving Category а такое нет
ну со стрелкой всегда плохо дерайвинг, я не уверен, тут же контрвариантный параметр, а для них мб не дерайвится

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
а у f x -> g x разве есть инстанс category?
но в примере выше у меня тоже не F внутри G, а F (f a)

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
так и у (->) для любых параметров есть Category
кайнд у типа, который ты определяешь в первом подходит, во втором нет

нет?

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
а почему возникло такое ощущение?
Потому что у тебя rank n type, x же скрывается.

kana
19.10.2018
18:33:00
Потому что у тебя rank n type, x же скрывается.
ну да, оно любое, поэтому и композится все

можт оно тоже полимофное получается?
newtype (~>) f g = Nat { runNat :: forall (x :: Type). f x -> g x } вот тут мономорфно все

а так да, он 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
Потому что у тебя rank n type, x же скрывается.
f :: forall x. Maybe x -> [x] f = undefined g :: forall x. [x] -> Maybe x g = undefined h = f . g

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)

даже так не хочет

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
хм.. а в консольке все ок

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
логично что key его не парсит
String отлично парсит. почему нет?

а, String::Object?

Страница 1536 из 1551