Array backend.
diff --git a/src/hyper_array.erl b/src/hyper_array.erl
new file mode 100644
index 0000000..5750b25
--- /dev/null
+++ b/src/hyper_array.erl
@@ -0,0 +1,26 @@
+-module(hyper_array).
+-export([new/1, get/2, set/3, fold/3]).
+-behaviour(hyper_register).
+
+new(P) ->
+    M = trunc(math:pow(2, P)),
+    array:new([{size, M}, {fixed, true}, {default, 0}]).
+
+get(Index, A) ->
+    case catch array:get(Index, A) of
+        {'EXIT', {badarg, _}} ->
+            error_logger:info_msg("bad: index: ~p~n ~p~n", [Index, A]);
+        0 ->
+            undefined;
+        Value ->
+            {ok, Value}
+    end.
+
+
+set(Index, Value, A) ->
+    array:set(Index, Value, A).
+
+
+
+fold(F, Acc, A) ->
+    array:sparse_foldl(F, Acc, A).
diff --git a/src/hyper_register.erl b/src/hyper_register.erl
new file mode 100644
index 0000000..e028f37
--- /dev/null
+++ b/src/hyper_register.erl
@@ -0,0 +1,15 @@
+-module(hyper_register).
+
+-callback new(P :: hyper:precision())                  -> hyper:registers().
+-callback get(Index :: integer(), hyper:registers())   -> {ok, integer()} | undefined.
+-callback set(Index :: integer(), Value :: integer(),
+              hyper:registers())                       -> hyper:registers().
+-callback fold(fun(), Acc :: any(), hyper:registers()) -> Acc :: any().
+    
+    
+
+
+
+
+
+