Уважаемые гуру Хаскеля, представляю на суд мою реализацию вектора. Попинайте плиз.
Кто то писал что Хаскель это проще чем пишут. Очень тяжело далось, просто вывих мозга получил.
И я не смог обойтись без type family, а в книжках (переведеных) не пишут про это расширение.
{-# LANGUAGE TypeFamilies, FlexibleContexts, FlexibleInstances, MultiParamTypeClasses, InstanceSigs #-}
module Graphics.XiRay where
type family TFloat
type family TInt
class (Floating TFloat, Integral TInt) => Vector v where
e::v->TInt->TFloat
type family TVector
class (Floating TFloat, Integral TInt, Vector TVector) => Matrix m where
row::m->TInt->TVector
-- Ниже пробуем заинстансить
data Vector4 f = Vector4 f f f f deriving Show
--
type Vector4Float = Vector4 Float
type instance TInt = Int
type instance TFloat = Float
instance Vector Vector4Float where
e::Vector4Float->TInt->TFloat
e (Vector4 x _ _ _) 0 = x
e (Vector4 _ x _ _) 1 = x
e (Vector4 _ _ x _) 2 = x
e (Vector4 _ _ _ x) 3 = x