accelerate- An embedded language for accelerated array processing

Portabilitynon-portable (GHC extensions)
MaintainerManuel M T Chakravarty <>




This interpreter is meant to be a reference implementation of the semantics of the embedded array language. The emphasis is on defining the semantics clearly, not on performance.

Surface types versus representation types

As a general rule, we perform all computations on representation types and we store all data as values of representation types. To guarantee the type safety of the interpreter, this currently implies a lot of conversions between surface and representation types. Optimising the code by eliminating back and forth conversions is fine, but only where it doesn't negatively affects clarity  after all, the main purpose of the interpreter is to serve as an executable specification.


Interpret an array expression

class Delayable as => Arrays as Source

Characterises the types that may be returned when running an array program.


Arrays () 
(Arrays as1, Arrays as2) => Arrays (as1, as2) 
Arrays (Array dim e) 

run :: Arrays a => Acc a -> aSource

Run a complete embedded array program using the reference interpreter.