Clack.App.Directoryは<component>を使ったClackアプリケーションの実例です。このアプリケーションはディレクトリをHTMLページとして返します。
以下のように使います。
;; /Users/nitro_idiot/ を http://localhost:5000/ に
(clack:clackup
(make-instance 'clack.app.directory:<clack-app-directory>
:root #p"/Users/nitro_idiot/")
:port 5000)
すると"/Users/nitro_idiot/"の中のファイルが http://localhost:5000/ で見られるようになります。
なぜこのアプリケーションは、ただの関数ではなく<component>を使っているかわかるでしょうか? インスタンスを作るときに:rootを引数に取り、その値によって挙動が変わります。これは、アプリケーションが関数として実装されていると難しいです。
クロージャを返す関数でも同じことができることは複雑になります。また、クラスを使う利点がもう一つあります。──継承です。正直に言うと、<clack-app-directory>は<component>を直接継承していません。<clack-app-file>を継承しています。これはディレクトリではなくファイルだけを配信するアプリケーションです。<clack-app-directory>がするのは、ただディレクトリ内のファイルを一覧できるようにするだけです。
興味がある人はcore/app/directory.lispとfile.lispを見るとコンポーネントがどのように使われているかがわかると思います。