Haskell练习解构记录语法

Haskell练习解构记录语法,haskell,record,Haskell,Record,开始练习复习学到的Haskell技能 module Clock (addDelta, fromHourMin, clockDecons) where data Clock = Clock { hours :: Int , mins :: Int } deriving Show fromHourMin :: Int -> Int -> Clock fromHourMin hour min = Clo

开始练习复习学到的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
我甚至还没有开始创建时钟的字符串实例

你可能是说

clockDecons :: Clock -> (Int, Int)
clockDecons clock = (hours clock, mins clock) 
你可能是说

clockDecons :: Clock -> (Int, Int)
clockDecons clock = (hours clock, mins clock) 
备选方案:

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

clockDecons :: Clock -> (Int, Int)
clockDecons (Clock hs ms) = (hs, ms) 
clockDecons :: Clock -> (Int, Int)
clockDecons Clock{hours=hs, mins=ms} = (hs, ms) 
备选方案:根本不要使用任何时钟信号器。实际上,您是在时钟构造函数下展开两个整数,以在成对构造函数下重新包装它们。这不是一个简单的问题。将时钟值包装起来,直到您实际需要解构它。

备选方案:

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

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

备选方案:根本不要使用任何时钟信号器。实际上,您是在时钟构造函数下展开两个整数,以在成对构造函数下重新包装它们。这不是一个简单的问题。将时钟值包装起来,直到您真正需要解构它。

如错误消息所示,您的代码中没有任何地方可以称为print。不过,我怀疑您正在尝试打印时数x而不是打印时数x,因为小时和分钟是Clock->Int类型的函数。您对clockDecons的定义可能也应该将小时和分钟应用于时钟。它还有一个问题,hs,ms是元组,而不是字符串。请包含生成错误的代码。您可以通过减少我们必须进行的猜测来帮助我们。@chepner,Michael:现在发布了全部代码。还没有给任何地方打电话,所以我真的不明白。@Carcigenicate:对。尝试了clockDecons时钟{hours=22,mins=10},这会触发错误。但它不应该考虑我要求Int作为回报。在元组中,是的,但在代码中仍然是一个IntNowhere,您称之为print,如错误消息所示。不过,我怀疑您正在尝试打印时数x而不是打印时数x,因为小时和分钟是Clock->Int类型的函数。您对clockDecons的定义可能也应该将小时和分钟应用于时钟。它还有一个问题,hs,ms是元组,而不是字符串。请包含生成错误的代码。您可以通过减少我们必须进行的猜测来帮助我们。@chepner,Michael:现在发布了全部代码。还没有给任何地方打电话,所以我真的不明白。@Carcigenicate:对。尝试了clockDecons时钟{hours=22,mins=10},这会触发错误。但它不应该考虑我要求Int作为回报。在一个元组中,是的,但仍然是一个Intit是我想要的,不是我的意思,但它是有效的,我可以从那里得到它。只是告诉我还有很多东西要学。不管怎样:我得到了我的答案。这是我想要的,不是我的意思,但它是有效的,我可以从那里得到它。只是告诉我还有很多东西要学。不管怎样,我得到了答案。