N -> N
Z :: N
data V :: N -> * -> * where
Cons :: t -> V l t -> V (S l) t
Nil :: V Z t
type family a > b where
(S a) > (S b) = a > b
(S _) > Z = True
_ > _ = False
gbi :: l > i ~ True => V l t -> Proxy i -> t
gbi = undefined
r = gbi (Cons 1 (Cons 2 Nil)) (Proxy :: Proxy (S Z))
-- r == 2
вот она щас андефайнд а надо что была дефайнд. помогите плиз
а зачем прокси? если через финит можно data Fin n where FZ :: Fin (S n) FS :: Fin n -> Fin (S n) gbi :: V l t -> Fin l -> t gbi (Cons x _) FZ = x gbi (Cons _ xs) (FS n) = gbi xs n
хотел через констрейнты чтобы не делать лишнее vhead :: l > Z ~ True => V l t -> t vhead (Cons v _) = v так получилось, думал что и с gbi можно будет
домашняя работа?
Сделай > классом, и чтобы оно предоставляло type-level N
Не понял. Объясни примером пожалуйста
Обсуждают сегодня