packages feed

alms-0.4.9: src/Basis/Exn.hs

{-# LANGUAGE
      QuasiQuotes #-}
module Basis.Exn ( entries ) where

import BasisUtils
import Value
import Syntax

import qualified Loc
import qualified Syntax.Notable

import Control.Exception

entries :: [Entry Raw]
entries = [
    fun "raise" -: [$ty| all `a. exn -> `a |]
      -= \exn -> throw (VExn exn :: VExn)
                 :: IO Value,
    fun "tryfun_string"
                -: [$ty| all `a. (unit -o `a) -> (exn + string) + `a |]
      -= \(VaFun _ f) -> do
           fmap Right (f vaUnit) `catches`
             [ Handler $ \(VExn v) -> return (Left (Left v))
             , Handler $ \e -> return (Left (Right (show (e:: IOError)))) ]
  ]