Haskell 如何将列表转换为可能列表
如果我输入“L1TDR2”,我想把它改成一个[L1,Top,Down,R2]列表。但它看起来失败了Haskell 如何将列表转换为可能列表,haskell,monads,Haskell,Monads,如果我输入“L1TDR2”,我想把它改成一个[L1,Top,Down,R2]列表。但它看起来失败了 readtree :: Char -> Char -> Maybe Tree readtree x y = case x of 'L' -> case y of '1' -> Just L1 '2' -> Just L2 _ -> Nothing 'R' -> case y of
readtree :: Char -> Char -> Maybe Tree
readtree x y = case x of
'L' -> case y of
'1' -> Just L1
'2' -> Just L2
_ -> Nothing
'R' -> case y of
'1' -> Just R1
'2' -> Just R2
_ -> Nothing
'T' -> Just Top
'D' -> Just Down
_ -> Nothing
treelist :: String -> Maybe [Tree]
treelist = mapM readtree
也许像
Couldn't match type ‘Char -> Maybe Tree’ with ‘Maybe Tree’
Expected type: Char -> Maybe Tree
Actual type: Char -> Char -> Maybe Tree
Probable cause: ‘readtree’ is applied to too few arguments
In the first argument of ‘mapM’, namely ‘readtree’
In the expression: mapM readtree
x $: xs = (x:) <$> xs
readTrees ('L':'1':rest) = L1 $: readTrees rest
readTrees ('T':rest) = Top $: readTrees rest
readTrees [] = Just []
readTrees _ = Nothing
x$:xs=(x:)xs
readTrees('L':'1':rest)=L1$:readTrees rest
readTrees('T':rest)=Top$:readTrees rest
readTrees[]=Just[]
readTrees=无
可能类似于
Couldn't match type ‘Char -> Maybe Tree’ with ‘Maybe Tree’
Expected type: Char -> Maybe Tree
Actual type: Char -> Char -> Maybe Tree
Probable cause: ‘readtree’ is applied to too few arguments
In the first argument of ‘mapM’, namely ‘readtree’
In the expression: mapM readtree
x $: xs = (x:) <$> xs
readTrees ('L':'1':rest) = L1 $: readTrees rest
readTrees ('T':rest) = Top $: readTrees rest
readTrees [] = Just []
readTrees _ = Nothing
x$:xs=(x:)xs
readTrees('L':'1':rest)=L1$:readTrees rest
readTrees('T':rest)=Top$:readTrees rest
readTrees[]=Just[]
readTrees=无
可能类似于
Couldn't match type ‘Char -> Maybe Tree’ with ‘Maybe Tree’
Expected type: Char -> Maybe Tree
Actual type: Char -> Char -> Maybe Tree
Probable cause: ‘readtree’ is applied to too few arguments
In the first argument of ‘mapM’, namely ‘readtree’
In the expression: mapM readtree
x $: xs = (x:) <$> xs
readTrees ('L':'1':rest) = L1 $: readTrees rest
readTrees ('T':rest) = Top $: readTrees rest
readTrees [] = Just []
readTrees _ = Nothing
import Control.Monad.Trans.State
readTrees=evalStateT$many readTree>=guard)其中
readTree=StateT uncon>>=\case
'L'->StateT uncon>>=\case
“1”->返回L1
'2'->返回L2
_->空的
'R'->StateT uncon>>=\case
“1”->返回L1
'2'->返回L2
_->空的
‘T’->返回顶部
‘D’->向下返回
_->空的
可能类似于
Couldn't match type ‘Char -> Maybe Tree’ with ‘Maybe Tree’
Expected type: Char -> Maybe Tree
Actual type: Char -> Char -> Maybe Tree
Probable cause: ‘readtree’ is applied to too few arguments
In the first argument of ‘mapM’, namely ‘readtree’
In the expression: mapM readtree
x $: xs = (x:) <$> xs
readTrees ('L':'1':rest) = L1 $: readTrees rest
readTrees ('T':rest) = Top $: readTrees rest
readTrees [] = Just []
readTrees _ = Nothing
import Control.Monad.Trans.State
readTrees=evalStateT$many readTree>=guard)其中
readTree=StateT uncon>>=\case
'L'->StateT uncon>>=\case
“1”->返回L1
'2'->返回L2
_->空的
'R'->StateT uncon>>=\case
“1”->返回L1
'2'->返回L2
_->空的
‘T’->返回顶部
‘D’->向下返回
_->空的
编译器告诉您:您的readtree
需要两个curry参数,但您只给它们1-现在您可能需要解析输入,因为您的一些标记的长度为两个L1
,R2
。。。还有一些只有一个D
和R
…编译器告诉您:您的readtree
需要两个curry参数,但您只给它们1-现在您可能需要解析输入,因为您的一些标记的长度为两个L1
,R2
。。。有些人只有一个D
和R
。。。