FFI.agda 793 B

12345678910111213141516171819202122232425262728293031323334353637
  1. module FFI where
  2. open import Common.Prelude
  3. _+'_ : Nat → Nat → Nat
  4. zero +' y = y
  5. suc x +' y = suc (x +' y)
  6. {-# COMPILE GHC _+'_ = (+) :: Integer -> Integer -> Integer #-}
  7. -- on-purpose buggy haskell implementation!
  8. _+''_ : Nat → Nat → Nat
  9. zero +'' y = y
  10. suc x +'' y = suc (x +'' y)
  11. {-# COMPILE GHC _+''_ = (-) :: Integer -> Integer -> Integer #-}
  12. listMap : {A B : Set} → (A → B) → List A → List B
  13. listMap f [] = []
  14. listMap f (x ∷ xs) = f x ∷ listMap f xs
  15. {-# COMPILE GHC listMap as listMap #-}
  16. {-# FOREIGN GHC
  17. agdaMap :: (a -> b) -> [a] -> [b]
  18. agdaMap = listMap () ()
  19. #-}
  20. open import Common.IO
  21. open import Common.Unit
  22. _>>_ : {A B : Set} → IO A → IO B → IO B
  23. m >> m' = m >>= λ _ → m'
  24. main : IO Unit
  25. main = do
  26. printNat (10 +' 5)
  27. printNat (30 +'' 7)