Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing Haskell解释写入文件的文本类型_Parsing_Haskell_Types - Fatal编程技术网

Parsing Haskell解释写入文件的文本类型

Parsing Haskell解释写入文件的文本类型,parsing,haskell,types,Parsing,Haskell,Types,将文字类型实现(ClientCore)写入文件。使用readFile返回字符串。分离此字符串并返回单个ClientCore类型的最简单方法是什么?这里有点挣扎(注意:Haskell初学者脚湿了) {-#语言重载字符串,DeriveGeneric} 导入系统.IO 导入数据.Text 导入数据.Aeson 导入Web.Scotty 进口GHC.仿制药 将限定数据.ByteString.Lazy导入为BL 导入控制 导入数据。Monoid(()) 数据ClientCore=ClientCore{cl

将文字类型实现(ClientCore)写入文件。使用
readFile
返回
字符串
。分离此
字符串
并返回单个
ClientCore
类型的最简单方法是什么?这里有点挣扎(注意:Haskell初学者脚湿了)

{-#语言重载字符串,DeriveGeneric}
导入系统.IO
导入数据.Text
导入数据.Aeson
导入Web.Scotty
进口GHC.仿制药
将限定数据.ByteString.Lazy导入为BL
导入控制
导入数据。Monoid(())
数据ClientCore=ClientCore{clId::Int
,clName::String
,clCore::String
,clClass::Int
}派生(显示,通用)
parseReadClientCore getFile=未定义
constructClientData::String->String->String->String->String->ClientCore
constructClientData clId“clName”clCore“clClass”=
ClientCore{clId=parse\u clId
,clName=clName'
,clCore=clCore'
,clClass=parseclclass
}
哪里
parse_clId=读取$clId'::Int
parse_clClass=读取$clClass'::Int
newClientCore::IO()
newClientCore=do
PUTSR“客户ID:”;clId是
Show
的反义词,它允许您将一个字符串转换为一个
ClientCore


我认为首先将文件分割成字符串,每个字符串代表一个
ClientCore
,然后读取每个片段会更容易。最简单的方法是在写入文件时,在每次之后添加一个换行符,然后使用拆分文件。

Read
添加到
派生
子句中,然后可以使用
Read
readsPrec
函数。好主意。我还没想到要逃走。
{-# LANGUAGE OverloadedStrings, DeriveGeneric #-}

import System.IO
import Data.Text
import Data.Aeson
import Web.Scotty
import GHC.Generics
import qualified Data.ByteString.Lazy as BL
import Control.Applicative
import Data.Monoid ((<>))

data ClientCore = ClientCore { clId :: Int
                             , clName :: String
                             , clCore :: String
                             , clClass :: Int
                             } deriving (Show, Generic)

parseReadClientCore getFile = undefined

constructClientData :: String -> String -> String -> String -> ClientCore
constructClientData clId' clName' clCore' clClass' =
  ClientCore { clId = parse_clId
             , clName = clName'
             , clCore = clCore'
             , clClass = parse_clClass
             }
  where
    parse_clId = read $ clId' :: Int
    parse_clClass = read $ clClass' :: Int

newClientCore :: IO ()
newClientCore = do
  putStr "Client ID: "; clId <- getLine
  putStr "Name: "; clName <- getLine
  putStr "Core business: "; clCore <- getLine
  putStr "Classification: "; clClass <- getLine
  postClientCore <- return (constructClientData clId clName clCore clClass)
  appendFile "haskelltypes.txt" $ (show postClientCore)

readClientCore :: IO ()
readClientCore = do
  getFile <- readFile "haskelltypes.txt"
  return (parseReadClientCore getFile)