The diamond kata takes as its input a letter, and outputs it in a diamond shape. Given a letter, it prints a diamond starting with 'A', with the supplied letter at the widest point.
In the following examples, spaces are indicated by 路
characters.
Diamond for letter 'A':
A
Diamond for letter 'C':
路路A路路
路B路B路
C路路路C
路B路B路
路路A路路
Diamond for letter 'E':
路路路路A路路路路
路路路B路B路路路
路路C路路路C路路
路D路路路路路D路
E路路路路路路路E
路D路路路路路D路
路路C路路路C路路
路路路B路B路路路
路路路路A路路路路
You need to implement the diamond
function which prints a diamond starting at
A
with the given character at its widest points. You can use the provided
signature if you are unsure about the types, but don't let it restrict your
creativity:
diamond :: Char -> Maybe [String]
This exercise works with textual data. For historical reasons, Haskell's
String
type is synonymous with [Char]
, a list of characters. For more
efficient handling of textual data, the Text
type can be used.
As an optional extension to this exercise, you can
- text
to your list of dependencies in package.yaml.Data.Text
in the following
way:import qualified Data.Text as T
import Data.Text (Text)
diamond :: Char -> Maybe [Text]
and refer to
Data.Text
combinators as e.g. T.pack
,Data.Text
,String
with Text
in Diamond.hs:diamond :: Char -> Maybe [Text]
This part is entirely optional.
Sign up to Exercism to learn and master Haskell with 107 exercises, and real human mentoring, all for free.