如何从元组中将元素定义为haskell中的类型同义词

aya*_*dov 0 getter haskell tuples

我在使用定义为类型同义词的元组的情况下,所以我不能真正使用记录结构.有没有办法获得这些元素?

这里更具体的是我的意思:

 type Movie  = (Title, Regisseur, MainActors, ReleaseDate, Genre, SalesPrice)  

 type Title = String

 type SalesPrice = Int   

 etc
Run Code Online (Sandbox Code Playgroud)

我怎样才能只Title和ReleaseDate一个例子.除了为元组中的每个位置定义一个getter函数.

Chr*_*lor 7

另一个选择是导入包Control.Lens.

>>> import Control.Lens
>>> let movie = ( "The Terminator"
                , "James Cameron"
                , ["Arnold Schwartzenegger", "Michael Biehn"]
                , 1984
                ,"Science Fiction"
                , 19.99)
>>> movie ^. _1
"The Terminator"
>>> movie ^. _4
1984
Run Code Online (Sandbox Code Playgroud)

我不建议你这样做.请改用记录语法.

data Movie = Movie
           { title       :: String
           , director    :: String
           , mainActors  :: [String]
           , releaseDate :: Int
           , genre       :: String
           , price       :: Double
           } deriving (Eq,Ord,Show)
Run Code Online (Sandbox Code Playgroud)

现在你可以做到

>>> let movie = Movie "The Terminator" "James Cameron"
                      ["Arnold Schwartzenegger", " Michael Biehn"]
                      1984 "Science Fiction" 19.99
>>> title movie
"The Terminator"
>>> releaseDate movie
1984
Run Code Online (Sandbox Code Playgroud)