リー "どのようにしてputStrLn
が機能しないのですか?"
if name == "cat"
then putStrLn (" ^-^
(. .)
=>;<=
/ \
| |")
エラーメッセージを含める必要があります。あなたはHaskellの文字列リテラルで改行を持つことができないためである
so.hs:3:38: error:
lexical error in string/character literal at character '\n'
:トップレベルの機能でこれを配置する(test name = ...
)コードが使用してコンパイルに失敗します。 。ハスケルで、複数行の文字列は、あなたが既にエスケープされている必要がありますあなたのASCIIアートで非エスケープバックスラッシュを持っていた各行の先頭と末尾に特別なエスケープ(バックスラッシュが必要ですので、我々は、あまりにも修正します:
test name =
if name == "cat"
then putStrLn (" ^- ^\n\
\ (. .)\n\
\ =>;<=\n\
\ / \\\n\
\ | |")
。
は今Haskellでif
文はより三項演算子のようなものですので、十分に型付けされたままに他の枝を必要とするため、我々は別のエラーを取得したコードは次のとおりです。
test name =
if name == "cat"
then putStrLn (" ^- ^\n\
\ (. .)\n\
\ =>;<=\n\
\ / \\\n\
\ | |")
else return()
また、あなたがきれいのために準引用符を使用することができますこれにはstring-qq
パッケージとquasiquotes laが必要ですnguage拡張子。拡張子は、構文[|<quoter name>|<string>|]
があり、文字列QQのパッケージには、文字列のs
という名前のクォータを提供しています。
{-# LANGUAGE QuasiQuotes #-}
import Data.String.QQ
import Control.Monad (when)
test2 name =
when (name == "cat") $ putStrLn [s|
^-^
(. .)
=>;<=
/ \\
| ||]
「putStrLn」はどのように機能しませんか? – Lee
@私は私の素朴な試みを示すために質問を編集しました。 –