私はこれを複数の方法で試しました。if-then-else、ガード、case文ですが、コンパイルできません。私はコードから、私がしたいことがはっきりしていると思います。なぜこれはできないのですか?そしてそれを真っ直ぐにするために私は何をしなければなりませんか?ここでif-then-elseに何が間違っていますか?
appendMsg :: String -> (String, Integer) -> Map.Map (String, Integer) [String] -> Map.Map (String, Integer) [String]
appendMsg a (b,c) m = do
let Just le1 = length . concat <$> Map.lookup (b,c) m
le2 = le1 + length a
if le2 < 1400 then (let m2 = Map.adjust (x ++ [a]) (b, c) m) else (print (le1, le2))
return (m2)
エラーメッセージはparse error on input `)'
です。角括弧を変更するとparse error on input `else'
が得られます。 elseパス(m2 = mとする)で言うと、ブラケットエラーが再び発生します。私が達成しようと何
は、他の機能はappendMsgとappendMsgと同じ引数を取り、そのLE2> 1400と呼ばれるべき場合LE2 < = 1400その後、m2は
f x = x ++ [a]
m2 = Map.adjust f (b, c) m
を使用して作成する必要がある場合、あります単に何も返さないはずです。
追加の問題は、これは右下のすべての勧告に従って設定されるとすぐということである。
if le2 < 1400 then let m2 = Map.adjust (++ [a]) (b, c) m in return (m2) else return()
私は道で同じである
No instance for (Monad (Map.Map (String, Integer)))
arising from a use of `return'
を言ってエラーが出ますエラー私は最終的に私がガードを使用した。問題は、この奇妙なタイプの残りのコードでは私ができることがほとんどないということです。どのようにしてこの型を(Map.Map(String、Integer)[String])に変換したり、それを完全に避けることができますか?
一般的には、どのようなエラーメッセージが表示されるかを含めることをお勧めします。 – Amber
'le2> = 1400'の場合と同じ' m2'とは何ですか? – rampion
'else'パスをたどった場合はどうなりますか? –