在Haskell tutorial, ä¸ï¼Œæˆ‘çœ‹åˆ°äº†è¿™æ ·çš„è¡¨æƒ…
data Vector a = Vector a a a deriving (Show)
å¯èƒ½ä¸ä¸€æ ·ï¼Œä½†æ˜¯éžå¸¸ç›¸ä¼¼ã€‚我有点困惑。è°èƒ½è§£é‡Šå®ƒåœ¨åšä»€ä¹ˆï¼Ÿ
ç”案 0 :(得分:3)
data Vector a = MkVector a a a
为任何类型Vector a
定义å‚数化数æ®ç±»åž‹a
。
它还定义了一ç§åˆ›å»ºè¯¥ç±»åž‹å€¼çš„方法:通过使用具有三个相åŒç±»åž‹å‚æ•°çš„æ•°æ®æž„é€ å‡½æ•°MkVector
。
对于任何类型a
,用三个类型MkVector
的值调用a
都会产生类型Vector a
的值。例如,
let a :: Int ; a = 1 ; v = MkVector a 3 4 in v :: Vector Int
let a :: Float ; a = 1 ; v = MkVector a 3 4 in v :: Vector Float
碰巧的是,我们也被å…许使用与Vector
类型相åŒçš„å称作为数æ®æž„é€ å‡½æ•°çš„å称。起åˆè¿™å¯èƒ½ä¼šé€ æˆæ··æ·†ã€‚
ç”案 1 :(得分:1)
这定义了一个å为Vector
çš„æ–°æ•°æ®ç±»åž‹ã€‚è®©æˆ‘ä»¬å°†å…¶åˆ†è§£ä¸ºå‡ ä¸ªä¸åŒçš„部分:
data Vector a -- Type part
= Vector a a a -- Constructor part
deriving (Show) -- Automatic derivation part
类型部分说:“以下内容将被定义为类型Vector a
,其ä¸a
是一些未知类型â€ï¼š
data Vector a -- Type part
æž„é€ å™¨éƒ¨åˆ†å®šä¹‰ä¸€ä¸ªå‡½æ•°Vector :: a -> a -> a -> Vector a
。请注æ„,类型和值具有ä¸åŒçš„åç§°ç©ºé—´ï¼Œå› æ¤å¯ä»¥å…·æœ‰ç›¸åŒçš„å称。
= Vector a a a -- Constructor part
自动派生部分告诉编译器自动为æ¤ç±»åž‹å®žçŽ°å‡½æ•°show
,从而使我们å¯ä»¥å¿½ç•¥ç»†èŠ‚。如果您还ä¸äº†è§£ç±»åž‹ç±»ï¼Œè¯·ä¸è¦æ‹…心这æ„味ç€ä»€ä¹ˆï¼Œä½†æ˜¯è¯·è®°ä½ï¼Œæ²¡æœ‰å®ƒï¼Œæ‚¨å°†æ— 法show
或print
这些值。
deriving (Show) -- Automatic derivation part
我们å¯ä»¥åœ¨GHCiä¸ä½¿ç”¨è¿™äº›å€¼ï¼š
λ> data Vector a = Vector a a a deriving (Show)
λ> Vector 1 2 3
Vector 1 2 3
λ> :type Vector True False True
Vector True False True :: Vector Bool
λ> :type Vector "Hello," " World" "!"
Vector "Hello," " World" "!" :: Vector [Char]