-- Allgemeine Funktion zur Erzeugung des Jahreskalenders year :: Year -> Picture Char year = stackWith 1 . map (spreadWith 4) . group 3 . map picture . months -- Erzeugt eine Liste von Monatsdeskriptoren (Tupel) für ein Jahr months :: Year -> [(String,Year,Dayname,Int)] months y = zipp4 (mnames,replicate 12 y,fstdays y,mlengths y) -- Konvertiert ein Tupel 4 beliebiger Listen in eine Tupelliste zipp4 :: ([a],[b],[c],[d]) -> [(a,b,c,d)] zipp4 (w:ws,x:xs,y:ys,z:zs) = (w,x,y,z) : zipp4 (ws,xs,ys,zs) zipp4 (_,_,_,_) = [] -- Liste von Monatsnamen mnames :: Picture Char mnames = ["Januar", "Februar", "Maerz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"] -- Erstellt gemäß einem Tupel aus Monatsname, Jahr, 1. Wochentag und Monatslänge das Bild eines Monats picture :: (String,Year,Dayname,Int) -> Picture Char picture (m,y,d,s) = above (cheading (m,y)) (entries (d,s))