interface Foldable t where foldr : (func : elem -> acc -> acc) -> (init : acc) -> (input : t elem) -> acc foldl