PasteRack.org
Paste # 97639
2022-07-07 22:37:43

Fork as a new paste.

Paste viewed 1527 times.


Embed:

  1. #lang racket
  2.  
  3. (require (prefix-in racket: racket))
  4.  
  5. (define-signature cat^
  6.   (identity compose))
  7.  
  8. (define-signature cartesian^ extends cat^
  9.   (pi1 pi2 pair))
  10.  
  11. (define-signature cocartesian^ extends cat^
  12.   (in1 in2 split))
  13.  
  14. (define-unit racket@
  15.   (import)
  16.   (export cartesian^ cocartesian^)
  17.   (define identity racket:identity)
  18.   (define compose racket:compose1)
  19.   (define pi1 car)
  20.   (define pi2 cdr)
  21.   (define ((pair f g) x) (cons (f x) (g x)))
  22.   (define (in1 x) `(left ,x))
  23.   (define (in2 x) `(rght ,x))
  24.   (define ((split f g) x)
  25.     (match x [`(left ,y) (f y)] [`(rght ,y) (g y)])))

=>