Fe?K      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafelA texture coordinate is a 3D-floating vector. You can access to its components by pattern matching on them: , let TexCoord r s t = TexCoord 0.1 0.2 0.3  That type is strcit and unboxed.(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafexA point is a single index that references the locations. It s a canonical type that truly represents a polygonal point.    (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe ^A normal is a 3-floating vector. You can access to its components by pattern matching on them: + let Normal nx ny nz = Normal 0.1 0.2 0.3  That type is strict and unboxed.     (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe`A location is a 4-floating vector. You can access to its components by pattern matching on them: * let Location x y z w = Location 1 2 3 4  That type is strict and unboxed.(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe#A line index is a pair of indices.  vi vti. vi references the locations and vti& indexes the texture coordinates. If vti == K , then that 3 doesn t have texture coordinates associated with. !" !" !" !"(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafeb'A face gathers several )1 to build up faces. It has a least three vertices)&A face index is a triplet of indices. ) vi vti vni, is a face that indexes the locations with vi, the texture coordinates with vti and the normals with vni. An index set to K means no information. That is, if vni == K , then that )( doesn t have a normal associated with. '()*+,-./ '()*+,-./ )*+,-'(/.'()*+,-./ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafeL A stream of M."LMNOPQRSTUVWXYZ[\]^_`abcdefghijklm"LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmLM NOPQRSTUVWXYZ[\]^_`abcdefghijklm(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe4 An element holds a value along with the user-defined object s name (if any), the associated groups, the used material and the smoothing group the element belongs to (if any). Those values can be used to sort the data per object or per group and to lookup materials.456789:456789:456789:456789: (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNonenNThe lexer context. The result of lexing a stream of tokens is this exact type.o Locations.pTexture coordinates.qNormals.rPoints.sLines.tFaces.uCurrent object.vCurrent groups.wCurrent material.xMaterial libraries.yCurrent smoothing group.z The empty nd. Such a context exists at the beginning of the token stream and gets altered as we consume tokens.{4The lexer function, consuming tokens and yielding a n.n|opqrstuvwxyz{}n|opqrstuvwxyz{}n |opqrstuvwxyz{}(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone? Locations.@Texture coordinates.ANormals.BPoints.CLines.DFaces.EMaterial libraries. =>?@ABCDEFG =>?@ABCDEFG =>?@ABCDEFG=>?@ABCDEFG (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNoneJ Extract a =% from a Wavefront OBJ formatted file.JJJJ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNoneb5  !"'()*+,-./456789:=>?@ABCDEJ4   !"'()*+,-/.456789:=>?@ABCDE~   !"#$$%&''()*+,-..//01234567899:;<=>?@AABCDEFGHIJKL MNOP Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  s (wavefront-0.7.0.3-K5rHFI9bEMy5jgYtN1bn6mCodec.Wavefront.TexCoordCodec.Wavefront.PointCodec.Wavefront.NormalCodec.Wavefront.LocationCodec.Wavefront.LineCodec.Wavefront.FaceCodec.Wavefront.ElementCodec.Wavefront.ObjectCodec.Wavefront.IOCodec.Wavefront.TokenCodec.Wavefront.LexerCodec.WavefrontTexCoord texcoordR texcoordS texcoordT $fEqTexCoord$fShowTexCoordPoint pointLocIndex $fEqPoint $fShowPointNormalnorXnorYnorZ $fEqNormal $fShowNormalLocationlocXlocYlocZlocW $fEqLocation$fShowLocationLine lineIndexA lineIndexB LineIndex lineLocIndexlineTexCoordIndex $fEqLineIndex$fShowLineIndex$fEqLine $fShowLineFace FaceIndex faceLocIndexfaceTexCoordIndex faceNorIndexQuadTriangle $fEqFaceIndex$fShowFaceIndex$fEqFace $fShowFaceElementelObjectelGroupselMtlelSmoothingGroupelValue $fEqElement $fShowElement WavefrontOBJ objLocations objTexCoords objNormals objPointsobjLinesobjFaces objMtlLibsctxtToWavefrontOBJ fromDList$fEqWavefrontOBJ$fShowWavefrontOBJfromFilebaseGHC.BaseNothing TokenStreamTokenTknVTknVNTknVTTknPTknLTknFTknGTknO TknMtlLib TknUseMtlTknStokenize analyseResult cleanupTokenslocationnormaltexCoordpointslinesfacegroupsobjectmtllibusemtlsmoothingGroupcomment slashThenElseeolname skipHSpacefloatuntilEndCtxt ctxtLocations ctxtTexCoords ctxtNormals ctxtPoints ctxtLines ctxtFacesctxtCurrentObjectctxtCurrentGroupsctxtCurrentMtl ctxtMtlLibsctxtCurrentSmoothingGroup emptyCtxtlexerprepareElement