Guest User

Untitled

a guest
Jan 16th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.87 KB | None | 0 0
  1. Category : (Type -> Type -> Type) -> Type
  2. Category (~>) = {
  3. id : forall a . a ~> a,
  4. compose : forall a b c . (b ~> c) -> (a ~> b) -> (a ~> c),
  5. }
  6.  
  7. fnCategory : Category (->)
  8. fnCategory = {
  9. id = \x -> x,
  10. compose = \f g x -> f (g x),
  11. }
  12.  
  13. LamLang repr (~>) = Category (~>) -> {
  14. lam : forall a b . (repr a ~> repr b) -> repr (a ~> b),
  15. app : forall a b . repr (a ~> b) -> repr a -> repr b,
  16. }
  17.  
  18. RecLang repr (~>) = Category (~>) -> {
  19. fix : forall a . (repr a ~> repr a) -> repr a,
  20. }
  21.  
  22. ArithLang repr = {
  23. int : Int -> repr Int,
  24. add : repr Int -> repr Int -> repr Int,
  25. mul : repr Int -> repr Int -> repr Int,
  26. }
  27.  
  28. test : forall repr . ArithLang repr -> LamLang repr (->) -> Category (->) -> repr
  29. test a l c =
  30. let lc = l c
  31. add1 = lc.lam (\x -> a.add (a.int 1) x)
  32. square = lc.lam (\x -> a.mul x x)
  33. in
  34. lc.app square (lc.app add1 (a.int 1))
Add Comment
Please, Sign In to add comment