title: clojure destructuring vs haskell-like argument pattern matching
body: <p>Coming from Haskell I find it hard in Clojure to traverse some data types.
  In Haskell if I like to do some recursion on a type, in most basic case something like</p>
  
  <pre><code>foo (x : [])     = Just value
  foo (x : y : xs) = bar y (foo xs)
  foo _            = Nothing
  </code></pre>
  
  <p>is just fine. </p>
  
  <p>But I think Clojure's destructuring is nothing near of being powerful as Haskell's pattern matching. Is there a nice idiomatic way to accomplish what I'm trying to do? For an example if I have a list/vector how can I match a case when there is no more elements and such?</p>