コードの整理とプロジェクトのビルド Haskellコードをモジュールにまとめる String、Data.Textモジュール、Data.Text.IOモジュール、回文か判定
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT6(コードの整理とプロジェクトのビルド)、LESSON 34(Haskellコードをモジュールにまとめる)、34.4(練習問題)Q34-1の解答を求めてみる。
コード
Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text.IO as TIO
import qualified Palindrome
main :: IO ()
main = do
TIO.putStrLn "回文か判定したい単語を入力"
text <- TIO.getLine
let response = if Palindrome.isPalindrome text
then "回文である。"
else "回文ではない。"
TIO.putStrLn response
コード
Palindrome.hs
{-# LANGUAGE OverloadedStrings #-}
module Palindrome (
isPalindrome
) where
import qualified Data.Text as T
preprocess :: T.Text -> T.Text
preprocess = T.strip . T.toLower
isPalindrome :: T.Text -> Bool
isPalindrome text =
let cleanText = preprocess text
in cleanText == (T.reverse cleanText)
入出力結果(Terminal, Zsh)
% ghc Main.hs
[1 of 2] Compiling Palindrome ( Palindrome.hs, Palindrome.o )
[2 of 2] Compiling Main ( Main.hs, Main.o )
Linking Main ...
% ./Main
回文か判定したい単語を入力
racecar
回文である。
% ./Main
回文か判定したい単語を入力
haskell
回文ではない。
% ./Main
回文か判定したい単語を入力
回文である。
% ./Main
回文か判定したい単語を入力
あいうえお
回文ではない。
% ./Main
回文か判定したい単語を入力
あいうえおおえういあ
回文である。
% ./Main
回文か判定したい単語を入力
あいいあ
回文である。
% ./Main
回文か判定したい単語を入力
AbBa
回文である。
%