Haskell 如何将列表转换为可能列表

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

如果我输入“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
        '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
。。。