{- This file is part of hOff-parser. hOff-parser is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. hOff-parser is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . -} {-| Module: HOff.Parser.Types Description: Types used in parser. Copyright: (C) Johann Lee , 2017 License: GPL-3 Maintainer: me@qinka.pro Stability: experimental Portability: unknown The types are used in parser. -} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE GADTs #-} module HOff.Parser.Types ( -- * Types of OFF OFF(..) , Vertice(..) , Face(..) , ParStat(..) -- * Functions , offVertice , offFace ) where import GHC.Exts (IsList(..)) -- | Basic format of file -- It will include only the vertices and faces. -- a is type for Vertice -- b is type for faces' index -- For example, type SimpleOFF = OFF [] Float. data OFF a b = OFF [Vertice a] [Face b] deriving (Eq,Show) -- | Vertices of OFF in x, y, z coordinate. -- a is type of value data Vertice a = Vertice (a,a,a) deriving (Eq,Show) instance Ord a => Ord (Vertice a) where compare (Vertice (a,b,c)) (Vertice (x,y,z)) = compare (maximum [a,b,c]) (maximum [x,y,z]) -- | Face of OFF store the index of every vertices. -- l is vector should be @* -> *@, and it will be used as array, or say vector. -- a is type of value data Face a = Face [a] deriving (Eq,Show) -- | Get vertices from OFF offVertice :: OFF a b -- ^ OFF -> [Vertice a] -- ^ Vertices offVertice (OFF v f) = v -- | Get faces from OFF offFace :: OFF a b -- ^ OFF -> [Face b] -- Faces offFace (OFF v f) = f -- | Status of parser. To get number of vertices and faces. data ParStat = ParStat { numVertices :: Int -- ^ number of vertices , numFaces :: Int -- ^ number of faces } deriving (Eq,Show)