根据var修改值



我正在尝试从文件(Integer, Char…)中读取一种类型的输入,并让值取决于类型文件。

我的问题是,如果我的输入是一个整数,我必须let value = read contents::Int如果我的输入是Charlet value = read contents::String,我处理这个的方式是使用两个不同的文件,我试图实现几个if子句,但到目前为止没有任何工作。我能做的最好的方法是什么?

import System.Environment
import System.IO
import Data.List
import Data.Typeable
---------------------------
{ HASKELL CODE } (problem:)
---------------------------
main :: IO()
main = do
args <- getArgs
contents <- readFile (head args)
let var = (show (typeOf contents))
if var == "[Char]" then
let value = read contents::String
else if var == "[Int]"
let value = read contents::Int
else
putStrLn "test"
print(problem value)

一种方法是使用Either:

parse :: String -> Either Int String
parse s = case readMaybe s of
Just n -> Left n
_ -> Right s
doSumthin :: Either Int String -> IO ()
doSumthin (Left 7) = print 50
doSumthin (Right "Santa is real") = putStrLn "Santa is fake"

你可以砍伐森林:

parseAndDoSumthin :: String -> IO ()
parseAndDoSumthin s = case (readMaybe s :: Maybe Int, s) of
(Just 7, _) -> print 50
(Nothing, "Santa is real") -> putStrLn "Santa is fake"

最新更新