这就是我在做的事情:
data Person = Person (IORef String) (IORef Int)
name <- newIORef "Boston"
age <- newIORef 100
p = Person name age
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以将它们放在一行中,例如:
p = Person (newIORef "Boston") (newIORef (100::Int))
Run Code Online (Sandbox Code Playgroud)
有没有办法把它们放在一行?
您可以使用以下IO实例Applicative:
p <- Person <$> newIORef "Boston" <*> newIORef 100
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本,则base可能需要
import Control.Applicative
Run Code Online (Sandbox Code Playgroud)
得到<$>和<*>.
顺便说一句,在其他语言(阿格达,伊德里斯)中,有一个称为成语括号的辛辣符号,这使得这样的事情非常好.如果我们在GHC中使用它们,我们可以像这样编写这个代码(这只是上面代码的符号):
p <- (| Person (newIORef "Boston") (newIORef 100) |)
Run Code Online (Sandbox Code Playgroud)
哪一个人可能认为会带来更好的代码.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |