我试图使用Haskell的交互模式通过串口发送消息给乐高NXT,但我无法弄清楚如何正确使用serialport函数。与Haskell交互使用串口
我有一个消息,应该在它的类型是ByteString
> let message = pack ([6, 0 ,0, 3, 224, 1, 208, 7]::[Word8])
我可以打开使用openSerial
串口的NXT播放音。
openSerial :: FilePath -> SerialPortSettings -> IO SerialPort
> let mybrick = openSerial "/dev/tty.NXT-DevB" defaultSerialSettings
但是然后我卡住了。我应该如何使用send
函数?
send :: SerialPort -> B.ByteString -> IO Int
> send mybrick message
这给我下面的错误信息。
<interactive>:31:6:
Couldn't match expected type `SerialPort'
with actual type `IO SerialPort'
In the first argument of `send', namely `mybrick'
In the expression: send mybrick message
In an equation for `it': it = send mybrick message
我终于搞定了!必须打开ghci(:set + m)上的多行输入,但我发现使用'send mybrick $ message'更容易。我也收到了错误消息,在开始时缺少两个消息长度字节,但现在我的NXT发出了一个声音:D – ihatetoregister 2013-04-28 17:53:05
我以前从未使用'+ m',这是一个很好的发现!真高兴你做到了! – 2013-04-28 19:54:12
另外,'f a b c d $ e'与'f a b c d e'完全相同,所以'send mybrick message'应该与'send mybrick $ message'相同。 – 2013-04-28 19:54:58