Size: a a a

2021 February 27

к

кана in Haskell
а он кстати и проходит, но проходит еще и тогда когда не должен проходить (даже когда вообще инстансов нет)
источник

к

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

foo :: forall (n :: Nat) -> f n
foo Zero = _
foo (Succ n) = _

)
источник

к

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

R

Roman in Haskell
кана
ну вот есть тайпкласс, который заменяет матчинг по натуральным числам на типе

class Foo n
instance Foo Zero
instance Foo n => Foo (Succ n)

и мне хочется, чтобы ghc знал, что для любых значений n, Foo n есть всегда
не для любых, потому что можно определить натуральное число, которое ни zero, ни succ (через data family)
источник

к

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

R

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

R

Roman in Haskell
можно постфактум расширить любой тип
источник

R

Roman in Haskell
data Nat = Z | S Nat

data family AlsoANat :: Nat
источник

к

кана in Haskell
так не выйдет же, он ругнется что Nat это не Type
источник

к

кана in Haskell
• Kind signature on data family declaration has non-TYPE
     and non-variable return kind ‘N’
   • In the data family declaration for ‘AlsoNat’
источник

R

Roman in Haskell
кана
• Kind signature on data family declaration has non-TYPE
     and non-variable return kind ‘N’
   • In the data family declaration for ‘AlsoNat’
а, да, я все время забываю про это ограничение, которое ничего не ограничивает
источник

R

Roman in Haskell
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}

data Nat = Z | S Nat

data family AlsoANat :: nat

type family IdNat (n :: Nat) :: Nat where
   IdNat 'Z = 'Z
   IdNat ('S n) = 'S n
   IdNat AlsoANat = AlsoANat
источник

R

Roman in Haskell
кана
• Kind signature on data family declaration has non-TYPE
     and non-variable return kind ‘N’
   • In the data family declaration for ‘AlsoNat’
^ полный код
источник

KV

Kirill Valyavin in Haskell
Roman
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}

data Nat = Z | S Nat

data family AlsoANat :: nat

type family IdNat (n :: Nat) :: Nat where
   IdNat 'Z = 'Z
   IdNat ('S n) = 'S n
   IdNat AlsoANat = AlsoANat
Мама, роди меня обратно...
источник

K

Kir in Haskell
Roman
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PolyKinds #-}

data Nat = Z | S Nat

data family AlsoANat :: nat

type family IdNat (n :: Nat) :: Nat where
   IdNat 'Z = 'Z
   IdNat ('S n) = 'S n
   IdNat AlsoANat = AlsoANat
data family AlsoANat :: nat

Так, стоп. data families же прибиты к Type, разве нет? Единственное не-прибитое семейство это Any.
источник

R

Roman in Haskell
Kir
data family AlsoANat :: nat

Так, стоп. data families же прибиты к Type, разве нет? Единственное не-прибитое семейство это Any.
ноуп, можно сделать кайнд-полиморфную дата фемелю
источник

R

Roman in Haskell
оно тайпчекается: https://ideone.com/IG5MJT
источник

R

Roman in Haskell
Kir
data family AlsoANat :: nat

Так, стоп. data families же прибиты к Type, разве нет? Единственное не-прибитое семейство это Any.
а Any это то же самое что AlsoANat, только тайп фемеля, а не дата фемеля
источник

K

Kir in Haskell
Roman
ноуп, можно сделать кайнд-полиморфную дата фемелю
Ну так-то Any же как-то там объявлен. Но всё равно странно.
источник
2021 February 28

[

[BRM]White Rabbit in Haskell
А в хаскеле есть генераторы рандомных чисел?
И если да, то как они могут быть чистыми?
источник