Size: a a a

2020 November 20

AA

A64m AL256m qn<co... in Haskell
единственное, что фигачить синглетоны руками это бойлерплейт еще в добаовок к тому, что надо все по три раза писать
источник

AA

A64m AL256m qn<co... in Haskell
потому всякие пакеты singletons и делаются
источник

AV

Alexander Vershilov in Haskell
Все радуйтесь я пошёл
источник

к

кана in Haskell
Danil Berestov
Я попробую поиграться потом. Пока что неясно(
можно попробовать написать вручную

data N = Z | S N

data SN n where
 SZ :: SN Z
 SS :: SN a -> SN (S a)

data SomeN = forall n. (Typeable n, KnownN n) => SomeN (SN n)

class KnownN (a :: N) where
 liftN :: N -> Maybe SomeN

instance KnownN Z where
 liftN Z = Just (SomeN SZ)
 liftN _ = Nothing

instance (Typeable n, KnownN n) => KnownN (S n) where
 liftN (S n) = case liftN @n n of
   Just (SomeN (n :: SN m)) | Just Refl <- eqT @n @m -> Just (SomeN (SS n))
   _ -> Nothing
 liftN _ = Nothing
источник

AV

Alexander Vershilov in Haskell
О, а тут снег, круто
источник

к

кана in Haskell
но такое не сработает, потому что не ясно как выбирать нужный инстанс
источник

DB

Danil Berestov in Haskell
Alexander Vershilov
О, а тут снег, круто
Always has been
источник

к

кана in Haskell
вся магия тут в том, что ghc сам выбирает этот инстанс
источник

AA

A64m AL256m qn<co... in Haskell
да инстансы ноун нат и не нужны, синглетоны просто матчить потом да и все
источник

к

кана in Haskell
ну нужно же как-то этот синглтон построить сначала
источник

к

кана in Haskell
из обычного N
источник

AA

A64m AL256m qn<co... in Haskell
и в чем проблема?
источник

к

кана in Haskell
ну это не попытка сделать самому, это вот к вопросу о том что за KnownNat и как он работает
источник

к

кана in Haskell
data N = Z | S N

data SN n where
 SZ :: SN Z
 SS :: SN a -> SN (S a)

data SomeN = forall n. SomeN (SN n)

liftN :: N -> SomeN
liftN Z = SomeN SZ
liftN (S n) =
 case liftN n of
   SomeN n -> SomeN (SS n)
источник

к

кана in Haskell
можно и так сделать
источник

к

кана in Haskell
не могу понять почему let и case работают по-разному
источник

к

кана in Haskell
почему let не достает exist типы
источник

к

кана in Haskell
вот выше как вместо case сделать let
источник

MK

Maxim Koltsov in Haskell
Вью паттерн напиши)
источник

к

кана in Haskell
Danil Berestov
Я попробую поиграться потом. Пока что неясно(
вот такой же код с нуля
источник