wic*_*her 3 haskell types typeclass
我在查明以下代码无效的原因时遇到了一些麻烦.我希望,因为Command数据类型是一个ServerCommand或ClientCommand任何类型的构造函数,期望一个Command能够接受一个或另一个.我似乎对这些数据类型应如何排队有一个基本的误解.
data ClientCommand = SEND |
DISCONNECT |
CONNECT
data ServerCommand = CONNECTED |
MESSAGE |
RECEIPT |
ERROR
data Command = ServerCommand | ClientCommand
type Frame = (Command, Maybe String)
makeConnect :: Frame
makeConnect = (CONNECT, (Just "hello!"))
Run Code Online (Sandbox Code Playgroud)
当我尝试将此代码加载到ghci时,我收到以下错误:
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Main ( Frames.hs, interpreted )
Frames.hs:15:16:
Couldn't match expected type ‘Command’
with actual type ‘ClientCommand’
In the expression: CONNECT
In the expression: (CONNECT, (Just "hello!"))
Failed, modules loaded: none.
Run Code Online (Sandbox Code Playgroud)
data Command = ServerCommand | ClientCommand
Run Code Online (Sandbox Code Playgroud)
这不符合你的想法.(提示:比较data Bool = True | False,考虑差异.)
如果需要可以存储a ServerCommand或a 的数据类型,则ClientCommand可以使用库类型
type Command = Either ServerCommand ClientCommand
Run Code Online (Sandbox Code Playgroud)
或创建自己的
data Command = S ServerCommand | C ClientCommand
Run Code Online (Sandbox Code Playgroud)
虽然我们正在努力,但请考虑重新设计您的数据
data ClientCommand = SEND String |
DISCONNECT |
CONNECT
Run Code Online (Sandbox Code Playgroud)
并放弃了这Frame件事.