我需要定义一个联合类型,该类型的集合包括
\na -> b 或者 a -> IO b
a -> b || a -> IO b
或者
\na -> b | IO b
foo :: (a -> b | IO b) -> IO (R a) -> IO (R b)
我试过data unionType b = b | IO b,不行。
Not a data constructor: \xe2\x80\x98b\xe2\x80\x99parser\nNo quick fixes available\nRun Code Online (Sandbox Code Playgroud)\n在哈斯克尔可以吗?
\n在 Haskell 中,求和类型(不相交联合类型的标准术语)需要为其组件显式“构造函数”,因此您需要编写如下内容:
data BarType b = BarPure b | BarIO (IO b)
Run Code Online (Sandbox Code Playgroud)
这定义了一个 type BarType,并且还定义了构造函数BarPure和BarIO用于构造该类型的值:
val1, val2 :: BarType String
val1 = BarPure "pure"
val2 = BarIO getLine
Run Code Online (Sandbox Code Playgroud)
并通过大小写匹配使用这种类型的值:
runBar :: BarType b -> IO b
runBar barb = case barb of
BarPure s -> pure s
BarIO act -> act
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |