检查类型的(Just (+2)) <*> (Just (+2))
我发现它有约束Num (a -> a),这对Num (a -> a)这里应该意味着什么感到困惑
(Just (+2)) <*> (Just (+2)) :: (Num a, Num (a -> a)) => Maybe (a -> a)
Run Code Online (Sandbox Code Playgroud) 我不确定这个函数指针类型声明语法,但它有效。语法就像声明一个普通的旧函数。
typedef struct Element GetChildCallback(void *userdata, usize parent, usize child_no);
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于它是否符合标准或它可能有哪些缺点的信息。
我认为这仅适用于 typedef,所以我更进一步,发现这也适用于常规函数参数:
extern inline void dmpstrn(const char *t, usize n, int printer(const char *fmt, ...));
inline void dmpstrn(const char *t, usize n, int printer(const char *fmt, ...)) {
usize len = strlen(t) > n ? n : strlen(t);
printer("\"");
for (usize i = 0; i < len; i += 1) {
if (t[i] == '\n')
printer("\\n");
else
printer("%c", t[i]);
}
printer("\"\n");
}
// ...
int main() {
dmpstrn("Hello\nworld", UINT64_MAX, …Run Code Online (Sandbox Code Playgroud) c typedef function-pointers implicit-conversion function-declaration