首页 > 解决方案 > 用 - in haskell 加入两个 IO

问题描述

我需要在中间加入两个IO Strings -。这是我想出的,可行的方法-正确的方法是什么?

import System.Environment
f :: String -> String -> IO String
f x y = (foldl1 (++)) <$> sequence [(getEnv x),(return "-"),(getEnv y)]

标签: haskellmonads

解决方案


您可以在这里使用应用样式功能:

f :: String -> String -> IO String
f x y = withHyp <$> getEnv x <*> getEnv y
    where withHyp ex ey = ex ++ '-' : ey

所以这里我们将两个Strings 连接起来,然后通过withHyp函数在中间用连字符连接起来。

或者对于我们需要获取的环境变量列表,我们可以使用mapM并执行intercalate

import Data.List(intercalate)

f :: [String] -> IO String
f xs = intercalate "-" <$> mapM getEnv xs

推荐阅读