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


以上是Haskell中定义数据属性常量的最佳实践是什么?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>