{ lib }: with lib; let join-str = concatStringsSep " "; toEDN = ds: if isString ds then ''"${ds}"'' else (if isInt ds then ds else (if isList ds then "[ ${join-str (map toEDN ds)} ]" else (if isAttrs ds then "{ ${join-str (mapAttrs (k: v: ":${k} ${toEDN v}") ds)} }" else throw "unsupported type: ${builtins.typeOf ds}: ${ds}"))); in { ds }: toEDN ds