{-#选项-cpp#-}
模块 GF.系统。使用信号 哪里
进口 控制。同时发生的 (我的线程ID, killThread线程)
进口 控制。例外 (有些例外,抓住)
进口 前奏曲 躲藏 (抓住)
#ifdef明w32_HOST_OS进口 全球总部。控制台处理程序
myInstallHandler(我的安装处理程序) 处理程序 = 安装处理程序 处理程序
我的捕获 = 捕捉 . 常数
my忽略 = 忽略#其他进口 系统。Posix公司。信号
myInstallHandler::处理程序->IO处理程序myInstallHandler(我的安装处理程序) 处理程序处理程序 = 信号->处理程序->可能的信号集->IO处理程序安装处理程序 信号信号INT 处理程序处理程序 可能是信号集对所有人来说。也许是什么都没有
myCatch::IO()->处理程序我的捕获 = IO()->处理程序捕捉
myIgnore::处理程序my忽略 = 处理程序忽略#结尾
{-#无线 可中断运行 #-}
可中断运行 :: IO(输入输出) 一 -> IO(输入输出) (要么 有些例外 一)
可中断运行::IO a->IO(或SomeException a)可中断运行 IO a(输入输出)一 =
做 线程IDt吨 <- IO线程ID我的线程ID
处理程序旧H <- 处理程序->IO处理程序myInstallHandler(我的安装处理程序) (IO()->处理程序我的捕获 (线程ID->IO()killThread线程 线程IDt吨))
或者SomeExceptionx个 <- IO(SomeException a)对于所有a.IO(a或a)第页 IO(SomeException之一)->(SomeException->IO(Some异常a))->IO(SomeException a)对于所有e a。异常e=>IO a->(e->IO a)->IO a`捕捉` SomeException->IO(或者SomeExction a)对于所有(m::*->*)a b.Monad m=>a->m(a或b)小时
处理程序->IO处理程序myInstallHandler(我的安装处理程序) 处理程序旧H
或者SomeException a->IO(或者SomeExeption a)对于所有(m::*->*)a.Monad m=>a->ma返回 或者SomeExceptionx个
哪里 p::IO(a或a)第页 = IO a(输入输出)一 IO a->(a->IO(a或a))->IO(b或a)对于所有(m::*->*)a b.Monad m=>m a->(a->m b)->m b>>= \一x个 -> a->IO(a或a)对于所有(m::*->*)a.Monad m=>a->ma返回 (a->IO(a或a))->a->IO对于所有a b(a->b)->a->b$! a->要么a对于所有b.b->要么a b赖特 (a->a)->a->a对于所有a b(a->b)->a->b$! 一x个
h::a->m(a或b)小时 一e(电子) = 要么a b->m(要么a b)对于所有(m::*->*)a.Monad m=>a->ma返回 (b->m(b中任一个))->b->m中任一个(b中任意一个)对于所有a b(a->b)->a->b$ a->要么a b对于所有的b.a->要么a b左侧 一e(电子)
可中断运行_ 时间: IO(输入输出) () -> IO(输入输出) ()
运行可中断_::IO()->IO()可中断运行_ = (SomeException()->())->IO(SomeException())->IO()对于所有(f::*->*)a b.函数f=>(a->b)->fa->fb功能性维修计划 ((某些异常->())->(()->())->任一SomeException()->对于所有c b(a->c)->(b->c)->b->c中的任何一个任何一个 (()->某些异常->()对于所有a b.a->b->a常数 ()) () -> ()对于所有a.a->a身份证件) (IO(SomeException())->IO())->(IO()->IO(或SomeException()))->IO()->IO()对于所有的b c a。(b->c)->(a->b)->a->c. IO()->IO(或SomeException())对于所有a.IO a->IO(或SomeException a)可中断运行
块中断 :: IO(输入输出) 一 -> IO(输入输出) 一
blockInterrupt::IO a->IO a块中断::IO a块中断 IO a(输入输出)一 =
做 处理程序旧H <- 处理程序->IO处理程序myInstallHandler(我的安装处理程序) 处理程序myIgnore(我忽略)
一x个 <- IO a(输入输出)一
处理程序->IO处理程序myInstallHandler(我的安装处理程序) 处理程序旧H
a->IO a对于所有(m::*->*)a.Monad m=>a->ma返回 一x个