2017-12-09 21 views
3

インポートされたパッケージからタイプ内のデータにアクセスしようとしています。Haskell:タプルであるタイプからn番目の値を取得

タイプはように(パッケージの作者で)宣言されています:

newtype MultiBalanceReport = 
    MultiBalanceReport ([DateSpan] 
        ,[MultiBalanceReportRow] 
        ,MultiBalanceReportTotals 
        ) 

そして、私はそうのような機能を持つタイプの最初のリストを抽出しようとしている:

getDates :: MultiBalanceReport -> [DateSpan] 
getDates (date,_,_) = date 

しかし、私は、関数を使用する場合、コンパイラは型が同じでないと文句を言い:

• Couldn't match expected type ‘MultiBalanceReport’ 
       with actual type ‘([DateSpan], t7, t8)’ 

私は共同のように感じますちょうどMultiBalanceReportタイプの内部の詳細を知らない?タイプを正しく定義しているパッケージをインポートしていませんか?

私はハスケルを新しくしています。私が間違った命名法を使用して自分の問題を説明しようとすると、すみませます。

+0

私はそれがアンチパターンであることを検討したいです。 'data MBR = MBR [DateSpan] [MultiBalanceReportRow] MultiBalanceReportTotals'を使って、MBRコンストラクタだけを使ってタプルを避けてください。 – chi

答えて

4

newtypeは、あなたが最初のコンストラクタMultiBalanceReportのうち、アンラップタプルに必要なので、コンストラクタとデータ型次のとおりです。

getDates :: MultiBalanceReport -> [DateSpan] 
getDates (MultiBalanceReport (date,_,_)) = date
4

あなたはあなたが本当に近くだ

getDates :: MultiBalanceReport -> [DateSpan] 
getDates (MultiBalanceReport (date,_,_)) = date 
3

あなたのパターンマッチでのnewtypeを含める必要があります。あなたはタプル型のパターンマッチングですが、実際の値はMultiBalanceReportです。にはタプルがです。

getDates :: MultiBalanceReport -> [DateSpan] 
getDates (MultiBalanceReport (date,_,_)) = date 
関連する問題