;;; $Id: temperature-mod.scm,v 1.2 2006/01/05 22:24:09 leavens Exp $ ;;; ;;; ::= hot "hot" ;;; | warm "warm" ;;; | cold "cold" (module temperature-mod (lib "typedscm.ss" "typedscm") (provide temperature? hot? warm? cold? hot warm cold parse-temperature) ;; type predicate (deftype temperature? (type-predicate-for temperature)) ;; case testers (discriminators) (deftype hot? (-> (temperature) boolean)) (deftype warm? (-> (temperature) boolean)) (deftype cold? (-> (temperature) boolean)) ;; constructors (deftype hot (-> () temperature)) (deftype warm (-> () temperature)) (deftype cold (-> () temperature)) ;; parsing/bless input correctness (deftype parse-temperature (-> (datum) temperature)) (defrep (temperature symbol)) (define temperature? (lambda (d) (or (eq? d 'hot) (eq? d 'warm) (eq? d 'cold)))) (define hot? (lambda (temp) (eq? temp 'hot))) (define warm? (lambda (temp) (eq? temp 'warm))) (define cold? (lambda (temp) (eq? temp 'cold))) (define hot (lambda () 'hot)) (define warm (lambda () 'warm)) (define cold (lambda () 'cold)) (define parse-temperature (lambda (d) (cond ((eq? d 'hot) (hot)) ((eq? d 'warm) (warm)) ((eq? d 'cold) (cold)) (else (error "parse-temperature: bad syntax:" d))))) ) ; end module