Упражнение на Haskell для деконструкции синтаксиса записей - PullRequest
1 голос
/ 08 июля 2019

Начальное упражнение, чтобы освежить в себе приобретенные навыки Haskell.

module Clock (addDelta, fromHourMin, clockDecons) where

data Clock = Clock { hours :: Int 
                   , mins  :: Int 
                   } deriving Show 

fromHourMin :: Int -> Int -> Clock
fromHourMin hour min = Clock {hours = hour, mins = min}

-- toString :: Clock -> String
clockDecons clock = (hs,ms) 
  where hs = hours 
        ms = mins

addDelta :: Int -> Int -> Clock -> Clock
addDelta hour min clock = undefined

Может быть, немного затуманено после целого дня, но почему я получаю:

<interactive>:15:1: error:
    • No instance for (Show (Clock -> Int))
        arising from a use of ‘print’
        (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it

Я даже не начал создавать строковые экземпляры часов.

Ответы [ 2 ]

5 голосов
/ 08 июля 2019

Вы, наверное, имели в виду

clockDecons :: Clock -> (Int, Int)
clockDecons clock = (hours clock, mins clock) 
3 голосов
/ 08 июля 2019

Альтернатива:

clockDecons :: Clock -> (Int, Int)
clockDecons (Clock hs ms) = (hs, ms) 

Альтернатива:

clockDecons :: Clock -> (Int, Int)
clockDecons Clock{hours=hs, mins=ms} = (hs, ms) 

Альтернатива: вообще не использовать clockDecons. По сути, вы разворачиваете два целых числа в конструкторе Clock, чтобы переразвернуть их в конструкторе (,) пар. Это не decons. Сохраняйте значение часов в обёртке, пока вам не понадобится его деконструировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...