小编ese*_*los的帖子

如何定义Category实例的相等性?

为了证明例如类别法适用于数据类型的某些操作,如何确定如何定义相等?考虑以下类型来表示布尔表达式:

data Exp
    = ETrue
    | EFalse
    | EAnd Exp Exp
    deriving (Eq)
Run Code Online (Sandbox Code Playgroud)

尝试证明Exp与身份ETrue和运算符形成一个类别是否可行:

(<&>) = EAnd
Run Code Online (Sandbox Code Playgroud)

没有重新定义Eq实例?使用的默认实例左身份法符,即:

ETrue <&> e == e
Run Code Online (Sandbox Code Playgroud)

评估为False.但是,定义一个eval函数:

eval ETrue =  True
eval EFalse = False
eval (EAnd e1 e2) = eval e1 && eval e2
Run Code Online (Sandbox Code Playgroud)

Eq实例为:

instance Eq Exp where
    e1 == e2 = eval e1 == eval e2
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.是否(==)对声称满足此类法律的一般要求进行比较,或者是否足以说法律适用于特定类型的平等运营商?

haskell category-theory

10
推荐指数
1
解决办法
522
查看次数

何时在ASP.NET管道中初始化会话状态

我有一个带有AuthorizeRequest事件处理程序的IHTTPModule.我想访问Session对象但它尚未初始化.我应该订阅哪个事件,以便尽早在管道中提供会话对象?

asp.net session-state

8
推荐指数
1
解决办法
3128
查看次数

使用超时运行异步计算

我不理解Async.RunSynchronously何时给出超时参数的语义.以下示例为什么不终止?

let runInMaxTime (time: int) (work: Async<'T>) =
    try
        Async.RunSynchronously(work,time)
        |> Some
    with
    | _     ->
        None

let rec forever () : unit  = 
    printfn "Forever looping"
    forever ()

// Never terminates
let x = runInMaxTime 10 <| async {return forever ()}
Run Code Online (Sandbox Code Playgroud)

适当的实现runInMaxTime会是什么样的?我提出的唯一有效的方法是基于Tasks和取消令牌.

f# asynchronous

2
推荐指数
1
解决办法
161
查看次数