Констрейнты на роли в текущем хаскеле делаются тривиально - class (forall a b . Coercible a b => Coercible (f a) (f b)) => Representational f Проблема в основном в том что ...
optparse-generic-like это кстати вообще легко делается newtype t <?> n = N t deriving stock Show type family MapFields x where MapFields (S1 ('MetaSel _ a b c) (Rec0 (t ...
А вы хотите что-то типа class (Eq (B a) => Ord (B a)) => C' a where type B a ?
Правильно я понимаю что это баг гхц? {-# LANGUAGE UndecidableInstances, UndecidableSuperClasses, ConstraintKinds, FlexibleInstances, GADTs, QuantifiedConstraints #-} class c...
type family a ~/ b :: Constraint where a ~/ a = TypeError ('Text "Some error message") _ ~/ _ = () class If f (a ~ Ty, b ~/ Ty) (b ~ Ty, a ~/ Ty) => Cls a b f не подойде...
Я так и не понял, чем ксонгоровские detecting the undetectable не подходят? Если надо просто выкинуть ошибку когда нет тайпинстанса достаточно такого data V1 class V2 type f...
data X = X { a :: Int <?> "b" , c :: Int <?> "d", e :: Maybe Int <?> "f" } deriving stock (Generic, Show) deriving (FromJSON, ToJSON) via CustomJSON '[OmitNothingFields] (...
Они используются для врапа/анврапа ньютайпов, для гадт, data/type families, ассоциированных типов, Coercible, и пробабли я еще что-нибудь забыл. Читать например https://citese...
А так как по вашему оно должно без оптимизаций не аллоцируя работать? Там везде Double, а они аллоцируются в куче. С оптимизацией оно воркер-враппнется и будет работать с unbo...
Ну так а как оно в принципе может для непустого работать? Вам нужно поматчить тип списка, который в рантайме уже стерт. Вы никак не сможете узнать, [] там или x:xs, если не пр...
Обобщенную Check в смысле higher order function All, чтобы использовать как All IsField? В принципе возможно, но нужна дефункциализация, нативных hof на уровне типов нет. Посм...
Есть ли кстати какая-то веская причина определять odd/even через rem а не mod? Я допускаю что rem может быть эффективнее для чего-то user-defined, без специального кодгена, но...
(a Data.Type.Equality.== b) ~ 'False?
Ее не может быть с зависимостью в другую сторону, по каррированной форме нельзя однозначно вывести некаррированную, e.g. a -> b -> c -> r это (a, b, c) -> r или (a, b) -> (c -...
А как вообще использовать нулярные левити полиморфные конструкторы? data B :: TYPE ('BoxedRep l) where T :: B F :: B data Foo = Foo (B @'Unlifted) fooT :: Foo fooT = F...
Как она тут поможет? Если сделать CursedJust bigEvaluatedList <|> CursedJust anotherBigEvaluatedList они будут оба жить пока этот CursedMaybe живет Если там еще санк он к...
А что должно происходить в таком случае? data Foo = Foo !Int !Int deriving Semigroup via (Sum Int, Product Int)
В принципе звучит логично, но я тогда не очень понимаю почему раньше не работало. Это как-то связано с simplified subsumption?
Ну потому что написать что-то такое средствами языка невозможно. Какой у него хотя бы тип должен быть?
А no explicit implementation for foo от этого не было? Интересно