From b98b1baefdd845a5267d512389a4f24703184f75 Mon Sep 17 00:00:00 2001 From: Carter Tazio Schonwald Date: Mon, 19 Feb 2024 21:22:03 -0500 Subject: [PATCH] finally adding those exotic but cool formats i've talked about forever --- numerical.cabal | 1 + src/Numerical/Array/Layout/Base.hs | 7 +++++-- src/Numerical/Array/Layout/Het.hs | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/Numerical/Array/Layout/Het.hs diff --git a/numerical.cabal b/numerical.cabal index 5e3cf469bb..6c140a54cd 100644 --- a/numerical.cabal +++ b/numerical.cabal @@ -65,6 +65,7 @@ library Numerical.Array.Layout.Base Numerical.Array.Layout.Dense Numerical.Array.Layout.Sparse + Numerical.Array.Layout.Het --Numerical.Array.Layout.Dense.Builder Numerical.Array.Layout.Builder Numerical.Array diff --git a/src/Numerical/Array/Layout/Base.hs b/src/Numerical/Array/Layout/Base.hs index 5ec25a171c..b54c24ce3d 100644 --- a/src/Numerical/Array/Layout/Base.hs +++ b/src/Numerical/Array/Layout/Base.hs @@ -11,7 +11,7 @@ {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE FlexibleInstances #-} -{-# LANGUAGE NoImplicitPrelude #-} + {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE CPP #-} @@ -20,7 +20,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE UndecidableInstances #-} - +{-# LANGUAGE NoImplicitPrelude #-} module Numerical.Array.Layout.Base( Layout(..) @@ -51,6 +51,7 @@ module Numerical.Array.Layout.Base( ) where +import Data.Dynamic import Data.Data import Data.Kind(Type) import Numerical.Nat @@ -280,6 +281,8 @@ class Layout form (rank :: Nat) | form -> rank where form -> address -> Int -> Maybe address + + {-# MINIMAL basicToAddress, basicToIndex, basicNextAddress,basicNextIndex ,basicAddressRange,basicLogicalShape,basicCompareIndex , transposedLayout, basicAddressPopCount,basicLogicalForm, basicAffineAddressShift #-} diff --git a/src/Numerical/Array/Layout/Het.hs b/src/Numerical/Array/Layout/Het.hs new file mode 100644 index 0000000000..424b82ea2b --- /dev/null +++ b/src/Numerical/Array/Layout/Het.hs @@ -0,0 +1,22 @@ + +{-# LANGUAGE TypeOperators #-} + +module Numerical.Array.Layout.Het where + +import Numerical.Array.Layout.Base +import Data.Dynamic + + +--- this operation is needed +--- so that we can define composite formats, eg +--- zero copy concatenations of arrays with mixed but +--- compatible formats +fromSomeAddress :: (Typeable addr, addr ~ LayoutAddress form ) => p form -> Dynamic -> Maybe addr +fromSomeAddress _ x = fromDynamic x +{- +The purpose of this module is to illustrate +and substantiate zero copy vertical and horizontal +concatenation of compatibly oriented Rectilinear formats +-} + +newtype SomeAddr = MkAddr Dynamic \ No newline at end of file