[英]How do i check if a string can be parsed to a certain type in Haskell?
所以我在haskell中有我自己的數據類型,定義如下:
data Token = Num Double | Op String
我想制作一個將字符串列表轉換為標記列表的函數。 例如
toTokenList ["2","+","3"]
> [Num 2.0, Op "+", Num 3.0]
我該怎么做呢?
我實現了一個功能,其轉換型Double
成Token
型,另一種是將一String
到Token
類型。 這些可以用於toTokenList
還是不可以?
我是 Haskell 的新手,如果你需要進一步澄清這個問題,請在評論中告訴我。
我們可以實現一個樂觀的算法,它首先將其解析為Double
,如果失敗,我們為該字符串返回一個Op
,例如:
import Text.Read(readMaybe)
toTokenList :: [String] -> [Token]
toTokenList = map (\x -> maybe (Op x) Num (readMaybe x))
或無積分:
toTokenList :: [String] -> [Token]
toTokenList = map (flip maybe Num . Op <*> readMaybe)
我們在這里使用readMaybe :: Read a => String -> Maybe a
, maybe :: b -> (a -> b) -> Maybe a -> b
提供后備和后處理值。
例如:
Prelude Data.Maybe Text.Read> toTokenList ["2","+","3"]
[Num 2.0,Op "+",Num 3.0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.