我正在寻找一个类似于此的函数:
withSelf :: (a -> b) -> a -> (a, b)
withSelf f x = (x, f x)
我和Hoogle一起搜索过这样的功能; 我搜索(a -> b) -> a -> (a, b)和a -> (a -> b) -> (a, b),这两者都不是决定性的.该Hackage页面上Data.Tuple没有什么我找的那么多.
我知道编写它是微不足道的,但我想在可能的情况下编写惯用的Haskell,并避免重新发明轮子.
假设我有一个编译单元file1.c,它声明了一个文件范围变量,如下所示:
int my_variable = 12;
Run Code Online (Sandbox Code Playgroud)
然后,在另一个编译单元file2.c中,我为该变量创建了一个extern声明,但声明为const:
extern const int my_variable;
Run Code Online (Sandbox Code Playgroud)
这将使用gcc编译并正常工作-Wall -Wextra -ansi -pedantic.但是,C89标准规定要使两种合格类型兼容,两者都应具有相同类型的兼容类型.添加const到声明会增加限制而不是避免限制.这是安全有效的C吗?使用头文件设置它的最佳做法是什么?