Как правильно использовать в Haskell zipWith для создания списка [[int int]]? - PullRequest
2 голосов
/ 03 апреля 2019
data Tegel = Teg Int Int
type RijTegels = [Tegel]


volleRijTegels :: RijTegels
volleRijTegels = ziptwee [21..36] (replicate 4 1 ++ replicate 4 2 ++ replicate 4 3 ++ replicate 4 4)

ziptwee :: [Int] -> [Int] -> RijTegels
ziptwee []      []    = []
ziptwee (x:xs) (y:ys) = Teg x y: ziptwee xs ys 

Теперь я использую две функции, но я хочу сделать это с одной.Я думал, что смогу использовать zipWith, но не могу понять, как.

volleRijTegels :: RijTegels
volleRijTegels = [zipWith (++) [1,2,3] [4,5,6]] -- here it is going wrong

Я предполагаю, что внешние скобки неправильно, но я не знаю, куда они должны идти.

Кто-нибудь, кто мог бы показать мне, как выполняется работа?

1 Ответ

1 голос
/ 03 апреля 2019

Проблема в том, что вам нужен тип RijTegels, но на самом деле тип, который вы создаете с помощью zipWith (++), равен [[a]].Чтобы изменить это, вы можете использовать конструктор типов вместо (++):

data Tegel = Teg Int Int deriving (Show)
type RijTegels = [Tegel]

volleRijTegels :: RijTegels
volleRijTegels = zipWith Teg [1,2,3] [4,5,6] -- here it is going wrong

main = print volleRijTegels

Попробуйте онлайн!

...