--- /dev/null
+! Copyright (C) 2020 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: arrays sequences.padded tools.test ;
+
+{ { 1 2 3 } } [ { 1 2 3 } 3 f <padded-tail> >array ] unit-test
+{ { 1 2 3 f f } } [ { 1 2 3 } 5 f <padded-tail> >array ] unit-test
+
+{ { 1 2 3 } } [ { 1 2 3 } 3 f <padded-head> >array ] unit-test
+{ { f f 1 2 3 } } [ { 1 2 3 } 5 f <padded-head> >array ] unit-test
--- /dev/null
+! Copyright (C) 2020 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+USING: accessors arrays kernel math math.order sequences
+sequences.private ;
+IN: sequences.padded
+
+TUPLE: padded
+{ underlying sequence read-only }
+{ length integer read-only }
+{ elt object read-only } ;
+
+TUPLE: padded-tail < padded ;
+TUPLE: padded-head < padded ;
+
+C: <padded-tail> padded-tail
+C: <padded-head> padded-head
+
+M: padded length
+ [ underlying>> length ] [ length>> ] bi max ;
+
+M: padded-tail nth-unsafe
+ [ underlying>> ] keep 2over bounds-check?
+ [ drop nth-unsafe ] [ 2nip elt>> ] if ;
+
+M: padded-head nth-unsafe
+ [ [ length>> ] [ underlying>> ] bi [ length [-] - ] keep ] keep
+ 2over bounds-check? [ drop nth ] [ 2nip elt>> ] if ;
+
+INSTANCE: padded immutable-sequence
+