Haskell中定义数据属性中常量的最佳实践是什么



以下面的代码为例。。我定义了一些具有特定性能的可穿戴鞋。。。(耐克、阿迪达斯、彪马(

data Shoe = Nike | Adidas | Puma deriving Show
class Wearable a where
forFeet :: a -> Bool
forUpperBody :: a -> Bool
comfortLevel :: a -> Int
purchasePrice :: a -> Int
from :: a -> String

instance Wearable Shoe where
forFeet _ = True
forUpperBody _ = False
comfortLevel Nike = 5
comfortLevel Adidas = 3
comfortLevel Puma = 8
purchasePrice Nike = 5
purchasePrice Adidas = 3
purchasePrice Puma = 3
from _ = "The World Store"

在typeclass的实例中,在不同的鞋子上定义purchasePrice和comfortLevel等属性在这里感觉有点笨拙。。在定义某些类型的属性时,这种行为的最佳实践是什么?

在这种情况下,我会说使用记录而不是类:

data Shoe = Nike | Adidas | Puma deriving Show
data Wearable = Wearable
{ forFeet       :: Bool
, forUpperBody  :: Bool
, comfortLevel  :: Int
, purchasePrice :: Int
, from          :: String
}
mkShoe :: Int -> Int -> Wearable
mkShoe comfort price = Wearable
{ forFeet       = True
, forUpperBody  = False
, comfortLevel  = comfort
, purchasePrice = price
, from          = "The World Store"
}
nike, adidas, puma :: Wearable
nike   = mkShoe 5 5
adidas = mkShoe 3 3
puma   = mkShoe 8 3
getWearable :: Shoe -> Wearable
getWearable show = case shoe of
Nike   -> nike
Adidas -> adidas
Puma   -> puma

相关内容

最新更新