         ] 2keep drop ulong deref >>length B{ } like
     ] keep length <compressed> ;
 
-: uncompress ( compressed -- byte-array )
+GENERIC: uncompress ( obj -- byte-array )
+
+M: compressed uncompress ( compressed -- byte-array )
     [
         length>> [ <byte-vector> dup underlying>> ] keep
         ulong <ref>

        data>> dup length pick
        [ compression.zlib.ffi:uncompress zlib-error ] dip
    ] bi ulong deref >>length B{ } like ;

! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types alien.data alien.syntax
byte-arrays byte-vectors combinators continuations destructors
fry kernel libc math math.functions math.ranges sequences system ;
QUALIFIED: compression.zlib.ffi
IN: compression.zlib

