title: Data Structures in Scheme
body: <p>I am learning Scheme, coming from a background of Haskell, and I've run into a pretty surprising issue - scheme doesn't seem to have custom data types??? (ie. objects, structs, etc.). I know some implementations have their own custom macros implementing structs, but R6RS itself doesn't seem to provide any such feature.</p>
  
  <p>Given this, I have two questions:</p>
  
  <ol>
  <li>Is this correct? Am I missing a feature that allows creation of custom data types?</li>
  <li>If not, how do scheme programmers structure a program?</li>
  </ol>
  
  <p>For example, any function trying to return multiple items of data needs some way of encapsulating the data. Is the best practice to use a hash map?</p>
  
  <pre><code>(define (read-user-input)
      (display "1. Add todo\n2. Delete todo\n3. Modify todo\n")
      (let ((cmd-num (read)))
      (if (equal? cmd-num "1") '(("command-number" . cmd-num) ("todo-text" . (read-todo)))
      (if (equal? cmd-num "2") '(("command-number" . cmd-num) ("todo-id"   . (read-todo-id)))
                               '(("command-number" . cmd-num) ("todo-id"   . (read-todo-id)))))))
  </code></pre>