簡體   English   中英

如何檢查字符串是否可以在 Haskell 中解析為某種類型?

[英]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]

我該怎么做呢?

我實現了一個功能,其轉換型DoubleToken型,另一種是將一StringToken類型。 這些可以用於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 amaybe :: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM