我刚开始学习Haskell.我认为我已经掌握了基础知识,但我想确保我实际上也强迫自己在功能上思考.
data Dir = Right | Left | Front | Back | Up | Down deriving (Show, Eq, Enum)
inv Right = Left
inv Front = Back
inv Up = Down
Run Code Online (Sandbox Code Playgroud)
无论如何,我想要做的就是创建一个函数来映射每个"Dir"和它的对面/ inv.我知道我可以轻松地继续这3行,但我不禁想知道是否有更好的方法.我尝试添加:
inv a = b where inv b = a
Run Code Online (Sandbox Code Playgroud)
但显然你不能这样做.所以我的问题是:是否有一种方法可以生成其余的反转或者更好的创建此函数的方法?
非常感谢.
我正在使用"cin >> my_char"在我正在尝试解析的输入记录中删除':'.这是一个最小的例子.
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;
int main () {
char c;
int x, y;
cin >> hex >> x >> hex >> c >> y;
cout << "x = " << x << "\ny = " << y << "\n";
}
Run Code Online (Sandbox Code Playgroud)
示例用法:
rc@timecube:/tmp$ g++ test.cpp && echo "0000a:ffff" | ./a.out
x = 10
y = 65535
Run Code Online (Sandbox Code Playgroud)
这段代码完全符合我的要求,但我不明白为什么.我希望看到类似的东西:
istream& operator>> (char& val);
Run Code Online (Sandbox Code Playgroud)
在这里的istream参考,但我没有.
那么这种行为是如何记录的呢?