Have done exactly that using GOOPS which is Guile's equivalent of CLOS:
scheme@(guile-user)> (use-modules (aiscm sequence) (aiscm element))
scheme@(guile-user)> (define a (arr (1 2 3) (4 5 6)))
scheme@(guile-user)> (get a)
$1 = #<sequence<sequence<int<8,unsigned>>>>:
((1 2 3)
(4 5 6))
scheme@(guile-user)> (get a 1)
$2 = #<sequence<int<8,unsigned>>>:
(4 5 6)
scheme@(guile-user)> (get a 0 1)
$3 = 4
scheme@(guile-user)> (get (get a 1) 0)
$4 = 4
That's the whole point of macros: To be able to create embedded domain specific (mini) languages.