Я пытаюсь написать функцию render
, используя toPosition
с
render :: Dimensie -> Figure a -> [[a]]
Но я не могу понять, как.Не могли бы вы предложить способ сделать это?
type Figure a = Pos -> a
type Pos = (Double, Double) -- (x, y)
chessboard :: Figure Bool
chessboard (x, y) = even (round x) == even (round y)
type Dimensie = (Int, Int)
render :: Dimensie -> Figure a -> [[a]]
render = undefined
toPosition :: Dimensie → (Int, Int) → Pos
toPosition d (x, y) = (fromIntegral x ∗ 2 / b − 1, 1 − fromIntegral y ∗ 2 / h)
where
b = fromIntegral (fst d − 1)
h = fromIntegral (snd d − 1)
И когда я называю это с
Figure> render (3,3) chessboard
, это должно дать
[[True,False,True],[False,True,False],[True,False,True]]
И тогда я хочуследуйте этому, написав функцию, которая дает определенный символ для определенного логического значения.Например, он должен отображать @
для True
и .
для False
boolChar :: Bool -> Char
boolChar = undefined
Но как мне это написать?Я не понимаю, как получить [[Bool]]
из [[a]]
в функции render
, он постоянно говорит мне, что это couldn't match expected type ‘a’ with actual type ‘Bool’
и что ‘a’ is a rigid type variable bound by the type signature for:
, а затем сообщает, в какой строке произошла ошибка.Так что мне написать для render d (x,y) c = ....
, чтобы он отображал запрашиваемый результат?