[Haskell-beginners] XmlPickler on ADT

Tim Perry tim.v2.0 at gmail.com
Tue Jul 31 22:14:49 CEST 2012


I found the error. I used "Renewable" as the name of the XML element tag
when it should have been "Renewables" with a trailing s. Oops. Sorry for
the spam -- Tim



On Tue, Jul 31, 2012 at 10:55 AM, Tim Perry <tim.v2.0 at gmail.com> wrote:

> Hi everyone,
>
> I'm trying to learn to write XmlPicklers.  I've been trying to follow the
> tutorial on the HaskelWiki, but it doesn't quite cover an issue I've run
> into.
>
> http://www.haskell.org/haskellwiki/HXT/Conversion_of_Haskell_data_from/to_XML
>
> I have a ADTs like so:
>
> data Plant = Plant
>
>     { renewables :: [Renewable]
>
>     , rewewableMonthly :: [RenewableMonthly]
>
>     , waterHeating :: [WaterHeating]
>
>     , hvac :: [HVAC]
>
>     } deriving (Read, Show, Eq)
>
> data Renewable = Renewable
>
>     { dcRating :: Double -- kW
>
>     , annualTDV :: Double -- CA Energy Comm. TDV
>
>     } deriving (Read, Show, Eq)
>
> data RenewableMonthly = RenewableMonthly
>
>     { month :: Int
>
>     , cost :: Double
>
>     , demand :: Double
>
>     , energy :: Double
>
>     } deriving (Read, Show, Eq)
>
> data WaterHeating = WaterHeating
>
>     { whName :: String                      -- name for reference purposes.
>
>     , whQuantity :: Int
> ...
>
> data HVAC = HVAC
>
>     { slaStatus :: String                  -- Specific leakage area construction type.
>
>     , newCFM50 :: Double                   -- New building leakage in cubic feet per minute.
>
>     , existCFM50 :: Double
>
>
> I want to use an XmlPickler to read and write this.  The XML looks like
> this:
>
> <Plant>
>
>   <Renewables DCRating="8.4" AnnualTDV="0" />
>
>   <RenewableMonthly Month="1" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="2" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="3" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="4" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="5" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="6" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="7" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="8" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="9" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="10" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="11" Cost="0" Demand="0" Energy="0" />
>
>   <RenewableMonthly Month="12" Cost="0" Demand="0" Energy="0" />
>
>   <WaterHeating Name="Daikin Altherma HP" Quantity="1" ConstructionStatus="New" EnergyFactor="2.344" SolarFraction="0" ....
>   <HVAC SLAStatus="New" NewCFM50="0" ExistCFM50="0" NewSLA="4.9000000953674316" ExistSLA="4.9" DuctStatus="New" ....
>
>     <Zone ...
>
>
> Running my code I get an error:
>
> -- (1) readDocument: start processing document "1101_11-001 Walsh.xml" --
> (1) getXmlContents: content read and decoded for
> "file:///fairoaks1/all_proj/1101%20PG&E%20CAHP%2011-12/CRM/EProDataExtractPlanning/XML%20samples/1101_11-001%20Walsh.xml"
> -- (1) getXmlContents' -- (1) readDocument: "1101_11-001 Walsh.xml" (mime
> type: "text/xml" ) will be processed -- (1) readDocument: "1101_11-001
> Walsh.xml" processed
>
> fatal error: document unpickling failed
> xpCheckEmptyContents: unprocessed XML content detected context: element
> "Plant" contents:
>
> Is it possible to write an XmlPickler for this?  Do I need to make
> Renewable, RenewableMonthly, WaterHeating, and HVAC all the same type with
> 4 constructors and use xpAlt? Ideas?
>
> Thanks,
> Tim
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120731/ad149d16/attachment-0001.htm>


More information about the Beginners mailing list