JS
гринтреды в Хаскеле вообще в язык встроены, а в Питоне несколько библиотек
Size: a a a
JS
AF
KV
AF
JS
JS
DM
Data.Constraint и увидел там занимательнный типnewtype a :- b
:k a :: Constraint и :k b :: Constraint:- означает что мы имеем в скоупе констрейнт bclass (Eq a) => Ord a
Ord a :- Eq a , зачем для пруфа этого факта нужен отдельный тип? Разве если у нас в скоупе есть Ord a, не значит ли это что есть Eq a?:- для игрушечных тайпклассовclass A a where
class (A a) => B a where
instance A Int
instance B Int
proof :: B Int :- A Int
proof = ???
:-`меня смущает -- `Sub (a => Dict b) , а именно смущает наличие толстой стрелки внутри скобокDM
к
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
data Dict a = a => Dict
newtype a :- b = Sub (a => Dict b)
class A a
class B b
instance A a => B a
a_imlpl_b :: A a :- B a
a_imlpl_b = Sub Dict
DM
DM
DM