在Haskell中的do上下文中应用构造函数
鉴于以下声明在Haskell中的do上下文中应用构造函数,haskell,constructor,Haskell,Constructor,鉴于以下声明 data MyCustomString=MyCustomString字符串派生(Show,Eq) getSomeString::IO字符串 我想在do上下文中将getSomeString的输出处理为IO MyCustomString: do 通常的方法是: do cs_one <- MyCustomString <$> getSomeString cs_two <- MyCustomString <$> getSomeStrin
data MyCustomString=MyCustomString字符串派生(Show,Eq)
getSomeString::IO字符串
我想在do
上下文中将getSomeString
的输出处理为IO MyCustomString
:
do
通常的方法是:
do
cs_one <- MyCustomString <$> getSomeString
cs_two <- MyCustomString <$> getSomeString
由于单子是函子,它专门用于单子的IO
如下:
(<$>) :: (a -> b) -> IO a -> IO b
()::(a->b)->IO a->IO b
它在IO monad下应用了一个函数,在这种情况下,将您的
IO字符串
转换为IO MyCustomString,因为getSomeString
返回一个IO字符串
,而构造函数需要一个裸字符串,所以不能将构造函数应用于getSomeString
首先,您必须获得实际生成的字符串,然后可以将其包装到构造函数中:
do
cs_one_str <- getSomeString
let cs_one = MyCustomString cs_one_str
...
或其操作员别名
:
你真是太棒了。我确实需要练习我的函子:)
do
cs_one_str <- getSomeString
let cs_one = MyCustomString cs_one_str
...
cs_one <- fmap MyCustomString getSomeString
cs_one <- MyCustomString <$> getSomeString