(* Main -- main entry point Copyright (C) 2013 Benjamin Barenblat This file is a part of 6.947. 6.947 is is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 6.947 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 6.947. If not, see . *) (********************************** Styles ***********************************) style smallCaps style siteTitle style navBar style active (* TODO: Use for active menu items *) style content style footer (********************************* Template **********************************) fun generic (pageName : option string) (content : xbody) : xhtml [] [] = let val titleString : string = case pageName of | None => "6.947 – Functional Programming Project Laboratory" | Some s => "6.947 – " ^ s in {[titleString]} {content}

6.947 is free software: you can redistribute it and/or modify it under the terms of the gnu Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

6.947 is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the gnu Affero General Public License for more details.

You can get the 6.947 source code via AFS.

end (******************************* Page headings *******************************) (* Generating nice headings and menus is quite difficult in Ur/Web--there are a lot of links that the compiler needs to be convinced aren't broken. The link scheme in this app is based on a variant 'pageName', which describes the name of the page. There's one value for each page. *) con pageName = variant (mapU unit [Main, Forum]) (* 'getName' generates the link text given a 'pageName'. *) fun getName (n : pageName) : xbody = match n { Main = fn () => Main, Forum = fn () => Forum } (* Now we can do the actual title and menu generation code. *) fun header (current : pageName) : xbody = let fun item (target : pageName) (page : unit -> transaction page) = if Variant.eq current target then
  • {getName target}
  • else
  • {getName target}
  • in

    6.947 – Functional Programming Project Laboratory

      {item (make [#Main] ()) main} {item (make [#Forum] ()) forum}
    end (*********************************** Pages ***********************************) and main () = return (generic None {header (make [#Main] ())}

    Like 6.115, 6.947 is a chance to remember why you came to mit: to learn and to build. Whereas 6.115 focuses on constructing digital systems from compositions of discrete integrated circuits, however, we’ll be focusing on functional programming – constructing software systems from compositions of discrete mathematical functions. Prepare to leave behind everything you've ever known about programming and enter a world of functors, combinators, and monads; a world without borders or boundaries; a world where anything is possible.

    ) and forum () = return (generic (Some "Forum") {header (make [#Forum] ())}

    Coming soon!

    )