packages feed

maid-2009.7.24: src/maid.hs

{-# LANGUAGE QuasiQuotes #-}

import Network.Loli
import Hack.Handler.SimpleServer
import System
import MPS.TH
import MPS.Light (splash, tuple2, reject)
import MPS (strip)
import Control.Arrow ((>>>))

main :: IO ()
main = do
  args <- getArgs
  let { port = 
    if length args == 0
      then 3000
      else read $ head args
    }
  
  putStrLn $ "\n  \226\157\130  Maid serving on port: " ++ show port
  
  run port $ loli $ do
    public (Just ".") [""]
    mapM_ (splash mime) mimes
  
mimes :: [(String, String)]
mimes = 
      lines 
  >>> map strip
  >>> reject null
  >>> map (words >>> tuple2)
  $ mime_data

mime_data :: String
mime_data = [$here|

3dm     x-world/x-3dmf
3dmf    x-world/x-3dmf
a       application/octet-stream
aab     application/x-authorware-bin
aam     application/x-authorware-map
aas     application/x-authorware-seg
abc     text/vnd.abc
acgi    text/html
afl     video/animaflex
ai      application/postscript
aif     audio/aiff
aif     audio/x-aiff
aifc    audio/aiff
aifc    audio/x-aiff
aiff    audio/aiff
aiff    audio/x-aiff
aim     application/x-aim
aip     text/x-audiosoft-intra
ani     application/x-navi-animation
aos     application/x-nokia-9000-communicator-add-on-software
aps     application/mime
arc     application/octet-stream
arj     application/arj
arj     application/octet-stream
art     image/x-jg
asf     video/x-ms-asf
asm     text/x-asm
asp     text/asp
asx     application/x-mplayer2
asx     video/x-ms-asf
asx     video/x-ms-asf-plugin
au      audio/basic
au      audio/x-au
avi     application/x-troff-msvideo
avi     video/avi
avi     video/msvideo
avi     video/x-msvideo
avs     video/avs-video
bcpio   application/x-bcpio
bin     application/mac-binary
bin     application/macbinary
bin     application/octet-stream
bin     application/x-binary
bin     application/x-macbinary
bm      image/bmp
bmp     image/bmp
bmp     image/x-windows-bmp
boo     application/book
book    application/book
boz     application/x-bzip2
bsh     application/x-bsh
bz      application/x-bzip
bz2     application/x-bzip2
c       text/plain
c       text/x-c
c++     text/plain
cat     application/vnd.ms-pki.seccat
cc      text/plain
cc      text/x-c
ccad    application/clariscad
cco     application/x-cocoa
cdf     application/cdf
cdf     application/x-cdf
cdf     application/x-netcdf
cer     application/pkix-cert
cer     application/x-x509-ca-cert
cha     application/x-chat
chat    application/x-chat
class   application/java
class   application/java-byte-code
class   application/x-java-class
com     application/octet-stream
com     text/plain
conf    text/plain
cpio    application/x-cpio
cpp     text/x-c
cpt     application/mac-compactpro
cpt     application/x-compactpro
cpt     application/x-cpt
crl     application/pkcs-crl
crl     application/pkix-crl
crt     application/pkix-cert
crt     application/x-x509-ca-cert
crt     application/x-x509-user-cert
csh     application/x-csh
csh     text/x-script.csh
css     application/x-pointplus
css     text/css
cxx     text/plain
dcr     application/x-director
deepv   application/x-deepv
def     text/plain
der     application/x-x509-ca-cert
dif     video/x-dv
dir     application/x-director
dl      video/dl
dl      video/x-dl
doc     application/msword
dot     application/msword
dp      application/commonground
drw     application/drafting
dump    application/octet-stream
dv      video/x-dv
dvi     application/x-dvi
dwf     drawing/x-dwf (old)
dwf     model/vnd.dwf
dwg     application/acad
dwg     image/vnd.dwg
dwg     image/x-dwg
dxf     application/dxf
dxf     image/vnd.dwg
dxf     image/x-dwg
dxr     application/x-director
el      text/x-script.elisp
elc     application/x-bytecode.elisp (compiled elisp)
elc     application/x-elc
env     application/x-envoy
eps     application/postscript
es      application/x-esrehber
etx     text/x-setext
evy     application/envoy
evy     application/x-envoy
exe     application/octet-stream
f       text/plain
f       text/x-fortran
f77     text/x-fortran
f90     text/plain
f90     text/x-fortran
fdf     application/vnd.fdf
fif     application/fractals
fif     image/fif
fli     video/fli
fli     video/x-fli
flo     image/florian
flx     text/vnd.fmi.flexstor
fmf     video/x-atomic3d-feature
for     text/plain
for     text/x-fortran
fpx     image/vnd.fpx
fpx     image/vnd.net-fpx
frl     application/freeloader
funk    audio/make
g       text/plain
g3      image/g3fax
gif     image/gif
gl      video/gl
gl      video/x-gl
gsd     audio/x-gsm
gsm     audio/x-gsm
gsp     application/x-gsp
gss     application/x-gss
gtar    application/x-gtar
gz      application/x-compressed
gz      application/x-gzip
gzip    application/x-gzip
gzip    multipart/x-gzip
h       text/plain
h       text/x-h
hdf     application/x-hdf
help    application/x-helpfile
hgl     application/vnd.hp-hpgl
hh      text/plain
hh      text/x-h
hlb     text/x-script
hlp     application/hlp
hlp     application/x-helpfile
hlp     application/x-winhelp
hpg     application/vnd.hp-hpgl
hpgl    application/vnd.hp-hpgl
hqx     application/binhex
hqx     application/binhex4
hqx     application/mac-binhex
hqx     application/mac-binhex40
hqx     application/x-binhex40
hqx     application/x-mac-binhex40
hta     application/hta
htc     text/x-component
htm     text/html
html    text/html
htmls   text/html
htt     text/webviewhtml
htx     text/html
ice     x-conference/x-cooltalk
ico     image/x-icon
idc     text/plain
ief     image/ief
iefs    image/ief
iges    application/iges
iges    model/iges
igs     application/iges
igs     model/iges
ima     application/x-ima
imap    application/x-httpd-imap
inf     application/inf
ins     application/x-internett-signup
ip      application/x-ip2
isu     video/x-isvideo
it      audio/it
iv      application/x-inventor
ivr     i-world/i-vrml
ivy     application/x-livescreen
jam     audio/x-jam
jav     text/plain
jav     text/x-java-source
java    text/plain
java    text/x-java-source
jcm     application/x-java-commerce
jfif    image/jpeg
jfif    image/pjpeg
jfif-tbnl       image/jpeg
jpe     image/jpeg
jpe     image/pjpeg
jpeg    image/jpeg
jpeg    image/pjpeg
jpg     image/jpeg
jpg     image/pjpeg
jps     image/x-jps
js      application/x-javascript
js      application/javascript
js      application/ecmascript
js      text/javascript
js      text/ecmascript
jut     image/jutvision
kar     audio/midi
kar     music/x-karaoke
ksh     application/x-ksh
ksh     text/x-script.ksh
la      audio/nspaudio
la      audio/x-nspaudio
lam     audio/x-liveaudio
latex   application/x-latex
lha     application/lha
lha     application/octet-stream
lha     application/x-lha
lhx     application/octet-stream
list    text/plain
lma     audio/nspaudio
lma     audio/x-nspaudio
log     text/plain
lsp     application/x-lisp
lsp     text/x-script.lisp
lst     text/plain
lsx     text/x-la-asf
ltx     application/x-latex
lzh     application/octet-stream
lzh     application/x-lzh
lzx     application/lzx
lzx     application/octet-stream
lzx     application/x-lzx
m       text/plain
m       text/x-m
m1v     video/mpeg
m2a     audio/mpeg
m2v     video/mpeg
m3u     audio/x-mpequrl
man     application/x-troff-man
map     application/x-navimap
mar     text/plain
mbd     application/mbedlet
mc$     application/x-magic-cap-package-1.0
mcd     application/mcad
mcd     application/x-mathcad
mcf     image/vasa
mcf     text/mcf
mcp     application/netmc
me      application/x-troff-me
mht     message/rfc822
mhtml   message/rfc822
mid     application/x-midi
mid     audio/midi
mid     audio/x-mid
mid     audio/x-midi
mid     music/crescendo
mid     x-music/x-midi
midi    application/x-midi
midi    audio/midi
midi    audio/x-mid
midi    audio/x-midi
midi    music/crescendo
midi    x-music/x-midi
mif     application/x-frame
mif     application/x-mif
mime    message/rfc822
mime    www/mime
mjf     audio/x-vnd.audioexplosion.mjuicemediafile
mjpg    video/x-motion-jpeg
mm      application/base64
mm      application/x-meme
mme     application/base64
mod     audio/mod
mod     audio/x-mod
moov    video/quicktime
mov     video/quicktime
movie   video/x-sgi-movie
mp2     audio/mpeg
mp2     audio/x-mpeg
mp2     video/mpeg
mp2     video/x-mpeg
mp2     video/x-mpeq2a
mp3     audio/mpeg3
mp3     audio/x-mpeg-3
mp3     video/mpeg
mp3     video/x-mpeg
mpa     audio/mpeg
mpa     video/mpeg
mpc     application/x-project
mpe     video/mpeg
mpeg    video/mpeg
mpg     audio/mpeg
mpg     video/mpeg
mpga    audio/mpeg
mpp     application/vnd.ms-project
mpt     application/x-project
mpv     application/x-project
mpx     application/x-project
mrc     application/marc
ms      application/x-troff-ms
mv      video/x-sgi-movie
my      audio/make
mzz     application/x-vnd.audioexplosion.mzz
nap     image/naplps
naplps  image/naplps
nc      application/x-netcdf
ncm     application/vnd.nokia.configuration-message
nif     image/x-niff
niff    image/x-niff
nix     application/x-mix-transfer
nsc     application/x-conference
nvd     application/x-navidoc
o       application/octet-stream
oda     application/oda
omc     application/x-omc
omcd    application/x-omcdatamaker
omcr    application/x-omcregerator
p       text/x-pascal
p10     application/pkcs10
p10     application/x-pkcs10
p12     application/pkcs-12
p12     application/x-pkcs12
p7a     application/x-pkcs7-signature
p7c     application/pkcs7-mime
p7c     application/x-pkcs7-mime
p7m     application/pkcs7-mime
p7m     application/x-pkcs7-mime
p7r     application/x-pkcs7-certreqresp
p7s     application/pkcs7-signature
part    application/pro_eng
pas     text/pascal
pbm     image/x-portable-bitmap
pcl     application/vnd.hp-pcl
pcl     application/x-pcl
pct     image/x-pict
pcx     image/x-pcx
pdb     chemical/x-pdb
pdf     application/pdf
pfunk   audio/make
pfunk   audio/make.my.funk
pgm     image/x-portable-graymap
pgm     image/x-portable-greymap
pic     image/pict
pict    image/pict
pkg     application/x-newton-compatible-pkg
pko     application/vnd.ms-pki.pko
pl      text/plain
pl      text/x-script.perl
plx     application/x-pixclscript
pm      image/x-xpixmap
pm      text/x-script.perl-module
pm4     application/x-pagemaker
pm5     application/x-pagemaker
png     image/png
pnm     application/x-portable-anymap
pnm     image/x-portable-anymap
pot     application/mspowerpoint
pot     application/vnd.ms-powerpoint
pov     model/x-pov
ppa     application/vnd.ms-powerpoint
ppm     image/x-portable-pixmap
pps     application/mspowerpoint
pps     application/vnd.ms-powerpoint
ppt     application/mspowerpoint
ppt     application/powerpoint
ppt     application/vnd.ms-powerpoint
ppt     application/x-mspowerpoint
ppz     application/mspowerpoint
pre     application/x-freelance
prt     application/pro_eng
ps      application/postscript
psd     application/octet-stream
pvu     paleovu/x-pv
pwz     application/vnd.ms-powerpoint
py      text/x-script.phyton
pyc     applicaiton/x-bytecode.python
qcp     audio/vnd.qcelp
qd3     x-world/x-3dmf
qd3d    x-world/x-3dmf
qif     image/x-quicktime
qt      video/quicktime
qtc     video/x-qtc
qti     image/x-quicktime
qtif    image/x-quicktime
ra      audio/x-pn-realaudio
ra      audio/x-pn-realaudio-plugin
ra      audio/x-realaudio
ram     audio/x-pn-realaudio
ras     application/x-cmu-raster
ras     image/cmu-raster
ras     image/x-cmu-raster
rast    image/cmu-raster
rexx    text/x-script.rexx
rf      image/vnd.rn-realflash
rgb     image/x-rgb
rm      application/vnd.rn-realmedia
rm      audio/x-pn-realaudio
rmi     audio/mid
rmm     audio/x-pn-realaudio
rmp     audio/x-pn-realaudio
rmp     audio/x-pn-realaudio-plugin
rng     application/ringing-tones
rng     application/vnd.nokia.ringing-tone
rnx     application/vnd.rn-realplayer
roff    application/x-troff
rp      image/vnd.rn-realpix
rpm     audio/x-pn-realaudio-plugin
rt      text/richtext
rt      text/vnd.rn-realtext
rtf     application/rtf
rtf     application/x-rtf
rtf     text/richtext
rtx     application/rtf
rtx     text/richtext
rv      video/vnd.rn-realvideo
s       text/x-asm
s3m     audio/s3m
saveme  application/octet-stream
sbk     application/x-tbook
scm     application/x-lotusscreencam
scm     text/x-script.guile
scm     text/x-script.scheme
scm     video/x-scm
sdml    text/plain
sdp     application/sdp
sdp     application/x-sdp
sdr     application/sounder
sea     application/sea
sea     application/x-sea
set     application/set
sgm     text/sgml
sgm     text/x-sgml
sgml    text/sgml
sgml    text/x-sgml
sh      application/x-bsh
sh      application/x-sh
sh      application/x-shar
sh      text/x-script.sh
shar    application/x-bsh
shar    application/x-shar
shtml   text/html
shtml   text/x-server-parsed-html
sid     audio/x-psid
sit     application/x-sit
sit     application/x-stuffit
skd     application/x-koan
skm     application/x-koan
skp     application/x-koan
skt     application/x-koan
sl      application/x-seelogo
smi     application/smil
smil    application/smil
snd     audio/basic
snd     audio/x-adpcm
sol     application/solids
spc     application/x-pkcs7-certificates
spc     text/x-speech
spl     application/futuresplash
spr     application/x-sprite
sprite  application/x-sprite
src     application/x-wais-source
ssi     text/x-server-parsed-html
ssm     application/streamingmedia
sst     application/vnd.ms-pki.certstore
step    application/step
stl     application/sla
stl     application/vnd.ms-pki.stl
stl     application/x-navistyle
stp     application/step
sv4cpio         application/x-sv4cpio
sv4crc  application/x-sv4crc
svf     image/vnd.dwg
svf     image/x-dwg
svr     application/x-world
svr     x-world/x-svr
swf     application/x-shockwave-flash
t       application/x-troff
talk    text/x-speech
tar     application/x-tar
tbk     application/toolbook
tbk     application/x-tbook
tcl     application/x-tcl
tcl     text/x-script.tcl
tcsh    text/x-script.tcsh
tex     application/x-tex
texi    application/x-texinfo
texinfo         application/x-texinfo
text    application/plain
text    text/plain
tgz     application/gnutar
tgz     application/x-compressed
tif     image/tiff
tif     image/x-tiff
tiff    image/tiff
tiff    image/x-tiff
tr      application/x-troff
tsi     audio/tsp-audio
tsp     application/dsptype
tsp     audio/tsplayer
tsv     text/tab-separated-values
turbot  image/florian
txt     text/plain
uil     text/x-uil
uni     text/uri-list
unis    text/uri-list
unv     application/i-deas
uri     text/uri-list
uris    text/uri-list
ustar   application/x-ustar
ustar   multipart/x-ustar
uu      application/octet-stream
uu      text/x-uuencode
uue     text/x-uuencode
vcd     application/x-cdlink
vcs     text/x-vcalendar
vda     application/vda
vdo     video/vdo
vew     application/groupwise
viv     video/vivo
viv     video/vnd.vivo
vivo    video/vivo
vivo    video/vnd.vivo
vmd     application/vocaltec-media-desc
vmf     application/vocaltec-media-file
voc     audio/voc
voc     audio/x-voc
vos     video/vosaic
vox     audio/voxware
vqe     audio/x-twinvq-plugin
vqf     audio/x-twinvq
vql     audio/x-twinvq-plugin
vrml    application/x-vrml
vrml    model/vrml
vrml    x-world/x-vrml
vrt     x-world/x-vrt
vsd     application/x-visio
vst     application/x-visio
vsw     application/x-visio
w60     application/wordperfect6.0
w61     application/wordperfect6.1
w6w     application/msword
wav     audio/wav
wav     audio/x-wav
wb1     application/x-qpro
wbmp    image/vnd.wap.wbmp
web     application/vnd.xara
wiz     application/msword
wk1     application/x-123
wmf     windows/metafile
wml     text/vnd.wap.wml
wmlc    application/vnd.wap.wmlc
wmls    text/vnd.wap.wmlscript
wmlsc   application/vnd.wap.wmlscriptc
word    application/msword
wp      application/wordperfect
wp5     application/wordperfect
wp5     application/wordperfect6.0
wp6     application/wordperfect
wpd     application/wordperfect
wpd     application/x-wpwin
wq1     application/x-lotus
wri     application/mswrite
wri     application/x-wri
wrl     application/x-world
wrl     model/vrml
wrl     x-world/x-vrml
wrz     model/vrml
wrz     x-world/x-vrml
wsc     text/scriplet
wsrc    application/x-wais-source
wtk     application/x-wintalk
xbm     image/x-xbitmap
xbm     image/x-xbm
xbm     image/xbm
xdr     video/x-amt-demorun
xgz     xgl/drawing
xif     image/vnd.xiff
xl      application/excel
xla     application/excel
xla     application/x-excel
xla     application/x-msexcel
xlb     application/excel
xlb     application/vnd.ms-excel
xlb     application/x-excel
xlc     application/excel
xlc     application/vnd.ms-excel
xlc     application/x-excel
xld     application/excel
xld     application/x-excel
xlk     application/excel
xlk     application/x-excel
xll     application/excel
xll     application/vnd.ms-excel
xll     application/x-excel
xlm     application/excel
xlm     application/vnd.ms-excel
xlm     application/x-excel
xls     application/excel
xls     application/vnd.ms-excel
xls     application/x-excel
xls     application/x-msexcel
xlt     application/excel
xlt     application/x-excel
xlv     application/excel
xlv     application/x-excel
xlw     application/excel
xlw     application/vnd.ms-excel
xlw     application/x-excel
xlw     application/x-msexcel
xm      audio/xm
xml     application/xml
xml     text/xml
xmz     xgl/movie
xpix    application/x-vnd.ls-xpix
xpm     image/x-xpixmap
xpm     image/xpm
x-png   image/png
xsr     video/x-amt-showrun
xwd     image/x-xwd
xwd     image/x-xwindowdump
xyz     chemical/x-pdb
z       application/x-compress
z       application/x-compressed
zip     application/x-compressed
zip     application/x-zip-compressed
zip     application/zip
zip     multipart/x-zip
zoo     application/octet-stream
zsh     text/x-script.zsh

|]