ダイヤモンドのKataは、文字を1つ入力として受け取り、それをダイヤモンドの形で出力します。 文字を1つ受け取ると、'A'から始まり、渡された文字が最も幅の広い位置にくるダイヤモンドを出力します。
以下の例では、スペースは·で表します。
文字'A'のダイヤモンド:
A
文字'C'のダイヤモンド:
··A··
·B·B·
C···C
·B·B·
··A··
文字'E'のダイヤモンド:
····A····
···B·B···
··C···C··
·D·····D·
E·······E
·D·····D·
··C···C··
···B·B···
····A····
diamond関数を実装する必要があります。この関数は、Aから始まり、与えられた文字を最も幅の広い位置に持つダイヤモンドを出力します。型がよくわからない場合は、用意されているシグネチャを使ってもかまいません。ただし、それに縛られて創造性を制限しないようにしましょう。
diamond :: Char -> Maybe [String]
この演習ではテキストデータを扱います。歴史的な理由から、HaskellのString型は、文字のリストである[Char]と同義です。テキストデータをより効率的に扱うには、Text型を使うことができます。
この演習の任意の発展として、次のことができます。
import qualified Data.Text as T
import Data.Text (Text)
diamond :: Char -> Maybe [Text]のように書いたり、Data.Textのコンビネーターを例えばT.packのように参照したりできるようになります。Data.Textのドキュメントを調べてみましょう。StringをすべてTextに置き換えられます。diamond :: Char -> Maybe [Text]
この部分は完全に任意です。