() , [] Haskell, .
[] . Property "Colors" [1,2,3,4] Property [] a, , . . 1 [] - . [Int] ( ints), [Bool] ( bools) [a] ( a); [] - , Int, Bool a .
[Int] [] Int, , , [] , .
:
data Property f a = Property String (f a) | Zilch
Property; Property f a . , , (Property Zilch) "" ( Zilch, String f a, Property).
, , f a, f a (f, a) , . f ( ) ! Property f.
:
*Main> var = Property "Stuff" (Just True)
*Main> :t var
var :: Property Maybe Bool
, Maybe - , :
data Maybe a = Just a | Nothing
, , , , .
Just True - Maybe Bool. Just, True. Maybe, Bool. Maybe Bool f a Property, : f is Maybe a is Bool.
, :
*Main> var = Property "Colors" [1,2,3,4]
*Main> :t var
var :: Num a => Property [] a
f a [1, 2, 3, 4]. - , Num t => [t]. , a f a t ( Num, ), f - []. [] Maybe, Nothing.
*Main> var = Property "Colors" (1,"Red")
*Main> :t var
var :: Num t => Property ((,) t) [Char]
f a (1, "Red"), Num t => (t, [Char]) (, String - [Char]). , , . (t, [Char]). - - , f a. , , (, (a, b)), ADT, . 2- - , (,) , t [Char]. , (,) t , [Char]. Haskell ((,) t) [Char], , . , f a, "" (,) t f [Char] a. Property ((,) t) [Char] ( Num t, ).
, , :
*Main> var = Property "Colors" 20
*Main> :t var
var :: Num (f a) => Property f a
f a 20, . , , Haskell , Num. , "", f a: . f a, 20, Num. , f a, 20 , Num, Num (f a) => f a, , var - f a ( ).
, , Integer, Int, Double .., , f a ; - , -, -. Num, Haskell , ( ) , , , Num . , , , , Haskell ( ) Num , .
, Num. Ratio . Ratio Int Ratio Integer, :
Main*> 4 :: Ratio Int
4 % 1
, :
*Main> var = Property "Colors" (20 :: Ratio Integer)
*Main> :t var
var :: Property Ratio Integer
1 , DataKinds , , . , , , , , vanilla Haskell, , .