Haskell有一个神奇的函数命名seq,它接受任何类型的参数并将其简化为弱头范式(WHNF).
我读过几个消息来源[不是我记得他们现在是谁...],声称"多态seq是坏的".他们以什么方式"坏"?
类似地,有一个rnf函数,它减少了Normal Form(NF)的参数.但是,这是一个类的方法; 它不适用于任意类型.对我来说似乎"显而易见",人们可以改变语言规范,将其作为内置原语提供,类似于seq.据推测,这可能比仅仅更糟糕seq.这是怎么回事?
最后,有人建议给seq,rnf,par和同类者同类型的id功能,而不是const功能,因为它是现在,会是一个进步.怎么会这样?
可能重复:
从C中的文件描述符获取文件名
是否有一种简单且(合理)可移植的方式从文件中获取文件名FILE*?
我使用打开文件f = fopen(filename, ...),然后传递f给其他各种函数,其中一些可能会报告错误.我想在错误消息中报告文件名,但避免传递额外的参数.
我可以创建一个自定义包装器struct { FILE *f, const char *name },但是可能有更简单的方法吗?(如果FILE*未打开使用fopen我不关心结果.)
在基础4.4.0.0的Control.Exception文档中,有一个如何创建异常层次结构的示例.该示例显示了如何通过根据父异常声明Exception类的实例来捕获特定异常的概括.这很酷,但是如何让我的例外孩子成为现有例外.例如,我想创建由IOException上的类型约束捕获的异常.Control.Exception中的示例显示了以下内容:
*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: SomeCompilerException)))
Caught MismatchedParentheses
*Main> throw MismatchedParentheses catch (\e -> putStrLn ("Caught " ++ show (e :: IOException)))
*** Exception: MismatchedParentheses
Run Code Online (Sandbox Code Playgroud)
如何获取IOException约束来捕获我的异常?