-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Statically checked physical dimensions. -- -- Dimensional is a library providing data types for performing -- arithmetic with physical quantities and units. Information about the -- physical dimensions of the quantities and units is embedded in their -- types and the validity of operations is verified by the type checker -- at compile time. The boxing and unboxing of numerical values as -- quantities is done by multiplication and division with units. The -- library is designed to, as far as is practical, enforce/encourage best -- practices of unit usage. @package dimensional @version 0.9 -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional newtype Dimensional v d a Dimensional :: a -> Dimensional v d a data DUnit data DQuantity type Unit = Dimensional DUnit type Quantity = Dimensional DQuantity (*~) :: Num a => a -> Unit d a -> Quantity d a (/~) :: Fractional a => Quantity d a -> Unit d a -> a data Dim l m t i th n j type DOne = Dim Zero Zero Zero Zero Zero Zero Zero type DLength = Dim Pos1 Zero Zero Zero Zero Zero Zero type DMass = Dim Zero Pos1 Zero Zero Zero Zero Zero type DTime = Dim Zero Zero Pos1 Zero Zero Zero Zero type DElectricCurrent = Dim Zero Zero Zero Pos1 Zero Zero Zero type DThermodynamicTemperature = Dim Zero Zero Zero Zero Pos1 Zero Zero type DAmountOfSubstance = Dim Zero Zero Zero Zero Zero Pos1 Zero type DLuminousIntensity = Dim Zero Zero Zero Zero Zero Zero Pos1 type Dimensionless = Quantity DOne type Length = Quantity DLength type Mass = Quantity DMass type Time = Quantity DTime type ElectricCurrent = Quantity DElectricCurrent type ThermodynamicTemperature = Quantity DThermodynamicTemperature type AmountOfSubstance = Quantity DAmountOfSubstance type LuminousIntensity = Quantity DLuminousIntensity class Mul d d' d'' | d d' -> d'' class Div d d' d'' | d d' -> d'' class NumType x => Pow d x d' | d x -> d' class NonZero x => Root d x d' | d x -> d' (*) :: (Num a, Mul d d' d'') => Dimensional v d a -> Dimensional v d' a -> Dimensional v d'' a (/) :: (Fractional a, Div d d' d'') => Dimensional v d a -> Dimensional v d' a -> Dimensional v d'' a (^) :: (Fractional a, Pow d n d') => Dimensional v d a -> n -> Dimensional v d' a (^+) :: (Num a, PosType n, Pow d n d') => Dimensional v d a -> n -> Dimensional v d' a negate :: Num a => Quantity d a -> Quantity d a (+) :: Num a => Quantity d a -> Quantity d a -> Quantity d a (-) :: Num a => Quantity d a -> Quantity d a -> Quantity d a abs :: Num a => Quantity d a -> Quantity d a nroot :: (Floating a, Root d n d') => n -> Dimensional v d a -> Dimensional v d' a sqrt :: (Floating a, Root d Pos2 d') => Dimensional v d a -> Dimensional v d' a cbrt :: (Floating a, Root d Pos3 d') => Dimensional v d a -> Dimensional v d' a (^/) :: (Floating a, Root d n d') => Dimensional v d a -> n -> Dimensional v d' a (*~~) :: (Functor f, Num a) => f a -> Unit d a -> f (Quantity d a) (/~~) :: (Functor f, Fractional a) => f (Quantity d a) -> Unit d a -> f a sum :: Num a => [Quantity d a] -> Quantity d a dimensionlessLength :: Num a => [Dimensional v d a] -> Dimensionless a log :: Floating a => Dimensionless a -> Dimensionless a sin :: Floating a => Dimensionless a -> Dimensionless a cos :: Floating a => Dimensionless a -> Dimensionless a tan :: Floating a => Dimensionless a -> Dimensionless a asin :: Floating a => Dimensionless a -> Dimensionless a acos :: Floating a => Dimensionless a -> Dimensionless a atan :: Floating a => Dimensionless a -> Dimensionless a sinh :: Floating a => Dimensionless a -> Dimensionless a cosh :: Floating a => Dimensionless a -> Dimensionless a tanh :: Floating a => Dimensionless a -> Dimensionless a asinh :: Floating a => Dimensionless a -> Dimensionless a acosh :: Floating a => Dimensionless a -> Dimensionless a atanh :: Floating a => Dimensionless a -> Dimensionless a exp :: Floating a => Dimensionless a -> Dimensionless a (**) :: Floating a => Dimensionless a -> Dimensionless a -> Dimensionless a atan2 :: RealFloat a => Quantity d a -> Quantity d a -> Dimensionless a one :: Num a => Unit DOne a _1 :: Num a => Dimensionless a _2 :: Num a => Dimensionless a _3 :: Num a => Dimensionless a _4 :: Num a => Dimensionless a _5 :: Num a => Dimensionless a _6 :: Num a => Dimensionless a _7 :: Num a => Dimensionless a _8 :: Num a => Dimensionless a _9 :: Num a => Dimensionless a _0 :: Num a => Dimensionless a pi :: Floating a => Dimensionless a dimUnit :: NumType n => String -> n -> Maybe String prefix :: Num a => a -> Unit d a -> Unit d a instance Eq a => Eq (Dimensional v d a) instance Ord a => Ord (Dimensional v d a) instance (NumType l, NumType m, NumType t, NumType i, NumType th, NumType n, NumType j) => Show (Dim l m t i th n j) instance (Show d, Show a) => Show (Quantity d a) instance Functor Dimensionless instance (Div l x l', Div m x m', Div t x t', Div i x i', Div th x th', Div n x n', Div j x j') => Root (Dim l m t i th n j) x (Dim l' m' t' i' th' n' j') instance (Mul l x l', Mul m x m', Mul t x t', Mul i x i', Mul th x th', Mul n x n', Mul j x j') => Pow (Dim l m t i th n j) x (Dim l' m' t' i' th' n' j') instance (Sum l l' l'', Sum m m' m'', Sum t t' t'', Sum i i' i'', Sum th th' th'', Sum n n' n'', Sum j j' j'') => Div (Dim l'' m'' t'' i'' th'' n'' j'') (Dim l' m' t' i' th' n' j') (Dim l m t i th n j) instance (Sum l l' l'', Sum m m' m'', Sum t t' t'', Sum i i' i'', Sum th th' th'', Sum n n' n'', Sum j j' j'') => Mul (Dim l m t i th n j) (Dim l' m' t' i' th' n' j') (Dim l'' m'' t'' i'' th'' n'' j'') -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.Quantities type DArea = Dim Pos2 Zero Zero Zero Zero Zero Zero type Area = Quantity DArea type DVolume = Dim Pos3 Zero Zero Zero Zero Zero Zero type Volume = Quantity DVolume type DVelocity = Dim Pos1 Zero Neg1 Zero Zero Zero Zero type Velocity = Quantity DVelocity type DAcceleration = Dim Pos1 Zero Neg2 Zero Zero Zero Zero type Acceleration = Quantity DAcceleration type DWaveNumber = Dim Neg1 Zero Zero Zero Zero Zero Zero type WaveNumber = Quantity DWaveNumber type DMassDensity = Dim Neg3 Pos1 Zero Zero Zero Zero Zero type MassDensity = Quantity DMassDensity type Density = MassDensity type DSpecificVolume = Dim Pos3 Neg1 Zero Zero Zero Zero Zero type SpecificVolume = Quantity DSpecificVolume type DCurrentDensity = Dim Neg2 Zero Zero Pos1 Zero Zero Zero type CurrentDensity = Quantity DCurrentDensity type DMagneticFieldStrength = Dim Neg1 Zero Zero Pos1 Zero Zero Zero type MagneticFieldStrength = Quantity DMagneticFieldStrength type DAmountOfSubstanceConcentration = Dim Neg3 Zero Zero Zero Zero Pos1 Zero type AmountOfSubstanceConcentration = Quantity DAmountOfSubstanceConcentration type Concentration = AmountOfSubstanceConcentration type DLuminance = Dim Neg2 Zero Zero Zero Zero Zero Pos1 type Luminance = Quantity DLuminance square :: Num a => Unit DLength a -> Unit DArea a cubic :: Num a => Unit DLength a -> Unit DVolume a type DPlaneAngle = DOne type PlaneAngle = Dimensionless type DSolidAngle = DOne type SolidAngle = Dimensionless type DFrequency = Dim Zero Zero Neg1 Zero Zero Zero Zero type Frequency = Quantity DFrequency type DForce = Dim Pos1 Pos1 Neg2 Zero Zero Zero Zero type Force = Quantity DForce type DPressure = Dim Neg1 Pos1 Neg2 Zero Zero Zero Zero type DStress = DPressure type Pressure = Quantity DPressure type Stress = Quantity DStress type DEnergy = Dim Pos2 Pos1 Neg2 Zero Zero Zero Zero type DWork = DEnergy type DQuantityOfHeat = DEnergy type Energy = Quantity DEnergy type Work = Quantity DWork type QuantityOfHeat = Quantity DQuantityOfHeat type DPower = Dim Pos2 Pos1 Neg3 Zero Zero Zero Zero type DRadiantFlux = DPower type Power = Quantity DPower type RadiantFlux = Quantity DRadiantFlux type DElectricCharge = Dim Zero Zero Pos1 Pos1 Zero Zero Zero type DQuantityOfElectricity = DElectricCharge type ElectricCharge = Quantity DElectricCharge type QuantityOfElectricity = Quantity DQuantityOfElectricity type DElectricPotential = Dim Pos2 Pos1 Neg3 Neg1 Zero Zero Zero type DPotentialDifference = DElectricPotential type DElectromotiveForce = DElectricPotential type ElectricPotential = Quantity DElectricPotential type PotentialDifference = Quantity DPotentialDifference type ElectromotiveForce = Quantity DElectromotiveForce type DCapacitance = Dim Neg2 Neg1 Pos4 Pos2 Zero Zero Zero type Capacitance = Quantity DCapacitance type DElectricResistance = Dim Pos2 Pos1 Neg3 Neg2 Zero Zero Zero type ElectricResistance = Quantity DElectricResistance type DElectricConductance = Dim Neg2 Neg1 Pos3 Pos2 Zero Zero Zero type ElectricConductance = Quantity DElectricConductance type DMagneticFlux = Dim Pos2 Pos1 Neg2 Neg1 Zero Zero Zero type MagneticFlux = Quantity DMagneticFlux type DMagneticFluxDensity = Dim Zero Pos1 Neg2 Neg1 Zero Zero Zero type MagneticFluxDensity = Quantity DMagneticFluxDensity type DInductance = Dim Pos2 Pos1 Neg2 Neg2 Zero Zero Zero type Inductance = Quantity DInductance type DLuminousFlux = DLuminousIntensity type LuminousFlux = Quantity DLuminousFlux type DIlluminance = Dim Neg2 Zero Zero Zero Zero Zero Pos1 type Illuminance = Quantity DIlluminance type DCelsiusTemperature = DThermodynamicTemperature type CelsiusTemperature = Quantity DCelsiusTemperature type DActivity = DFrequency type Activity = Quantity DActivity type DAbsorbedDose = Dim Pos2 Zero Neg2 Zero Zero Zero Zero type DSpecificEnergy = DAbsorbedDose type DKerma = DAbsorbedDose type AbsorbedDose = Quantity DAbsorbedDose type SpecificEnergy = Quantity DSpecificEnergy type Kerma = Quantity DKerma type DDoseEquivalent = DAbsorbedDose type DAmbientDoseEquivalent = DDoseEquivalent type DDirectionalDoseEquivalent = DDoseEquivalent type DPersonalDoseEquivalent = DDoseEquivalent type DEquivalentDose = DDoseEquivalent type DoseEquivalent = Quantity DDoseEquivalent type AmbientDoseEquivalent = DoseEquivalent type DirectionalDoseEquivalent = DoseEquivalent type PersonalDoseEquivalent = DoseEquivalent type EquivalentDose = DoseEquivalent type DAngularVelocity = DFrequency type AngularVelocity = Quantity DAngularVelocity type DAngularAcceleration = Dim Zero Zero Neg2 Zero Zero Zero Zero type AngularAcceleration = Quantity DAngularAcceleration type DDynamicViscosity = Dim Neg1 Pos1 Neg1 Zero Zero Zero Zero type DynamicViscosity = Quantity DDynamicViscosity type DMomentOfForce = DEnergy type MomentOfForce = Quantity DMomentOfForce type DSurfaceTension = Dim Zero Pos1 Neg2 Zero Zero Zero Zero type SurfaceTension = Quantity DSurfaceTension type DHeatFluxDensity = Dim Zero Pos1 Neg3 Zero Zero Zero Zero type DIrradiance = DHeatFluxDensity type HeatFluxDensity = Quantity DHeatFluxDensity type Irradiance = Quantity DIrradiance type DRadiantIntensity = DPower type RadiantIntensity = Quantity DRadiantIntensity type DRadiance = DIrradiance type Radiance = Quantity DRadiance type DHeatCapacity = Dim Pos2 Pos1 Neg2 Zero Neg1 Zero Zero type DEntropy = DHeatCapacity type HeatCapacity = Quantity DHeatCapacity type Entropy = Quantity DEntropy type DSpecificHeatCapacity = Dim Pos2 Zero Neg2 Zero Neg1 Zero Zero type DSpecificEntropy = DSpecificHeatCapacity type SpecificHeatCapacity = Quantity DSpecificHeatCapacity type SpecificEntropy = Quantity DSpecificEntropy type DThermalConductivity = Dim Pos1 Pos1 Neg3 Zero Neg1 Zero Zero type ThermalConductivity = Quantity DThermalConductivity type DEnergyDensity = DPressure type EnergyDensity = Quantity DEnergyDensity type DElectricFieldStrength = Dim Pos1 Pos1 Neg3 Neg1 Zero Zero Zero type ElectricFieldStrength = Quantity DElectricFieldStrength type DElectricChargeDensity = Dim Neg3 Zero Pos1 Pos1 Zero Zero Zero type ElectricChargeDensity = Quantity DElectricChargeDensity type DElectricFluxDensity = Dim Neg2 Zero Pos1 Pos1 Zero Zero Zero type ElectricFluxDensity = Quantity DElectricFluxDensity type DPermittivity = Dim Neg3 Neg1 Pos4 Pos2 Zero Zero Zero type Permittivity = Quantity DPermittivity type DPermeability = Dim Pos1 Pos1 Neg2 Neg2 Zero Zero Zero type Permeability = Quantity DPermeability type DMolarEnergy = Dim Pos2 Pos1 Neg2 Zero Zero Neg1 Zero type MolarEnergy = Quantity DMolarEnergy type DMolarEntropy = Dim Pos2 Pos1 Neg2 Zero Neg1 Neg1 Zero type DMolarHeatCapacity = DMolarEntropy type MolarEntropy = Quantity DMolarEntropy type MolarHeatCapacity = Quantity DMolarHeatCapacity type DExposure = Dim Zero Neg1 Pos1 Pos1 Zero Zero Zero type Exposure = Quantity DExposure type DAbsorbedDoseRate = Dim Pos2 Zero Neg3 Zero Zero Zero Zero type AbsorbedDoseRate = Quantity DAbsorbedDoseRate type DImpulse = Dim Pos1 Pos1 Neg1 Zero Zero Zero Zero type Impulse = Quantity DImpulse type DMassFlow = Dim Zero Pos1 Neg1 Zero Zero Zero Zero type MassFlow = Quantity DMassFlow type DGravitationalParameter = Dim Pos3 Zero Neg2 Zero Zero Zero Zero type GravitationalParameter = Quantity DGravitationalParameter type Angle = PlaneAngle type Thrust = Force type EnergyPerUnitMass = SpecificEnergy -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.SIUnits deca :: Num a => Unit d a -> Unit d a hecto :: Num a => Unit d a -> Unit d a kilo :: Num a => Unit d a -> Unit d a mega :: Num a => Unit d a -> Unit d a giga :: Num a => Unit d a -> Unit d a tera :: Num a => Unit d a -> Unit d a peta :: Num a => Unit d a -> Unit d a exa :: Num a => Unit d a -> Unit d a zetta :: Num a => Unit d a -> Unit d a yotta :: Num a => Unit d a -> Unit d a deka :: Num a => Unit d a -> Unit d a centi :: Fractional a => Unit d a -> Unit d a milli :: Fractional a => Unit d a -> Unit d a micro :: Fractional a => Unit d a -> Unit d a nano :: Fractional a => Unit d a -> Unit d a pico :: Fractional a => Unit d a -> Unit d a femto :: Fractional a => Unit d a -> Unit d a atto :: Fractional a => Unit d a -> Unit d a zepto :: Fractional a => Unit d a -> Unit d a yocto :: Fractional a => Unit d a -> Unit d a deci :: Fractional a => Unit d a -> Unit d a meter :: Num a => Unit DLength a metre :: Num a => Unit DLength a gram :: Fractional a => Unit DMass a second :: Num a => Unit DTime a ampere :: Num a => Unit DElectricCurrent a kelvin :: Num a => Unit DThermodynamicTemperature a mole :: Num a => Unit DAmountOfSubstance a candela :: Num a => Unit DLuminousIntensity a fromDiffTime :: Fractional a => DiffTime -> Time a toDiffTime :: (Real a, Fractional a) => Time a -> DiffTime radian :: Fractional a => Unit DPlaneAngle a steradian :: Fractional a => Unit DSolidAngle a hertz :: Fractional a => Unit DFrequency a newton :: Fractional a => Unit DForce a pascal :: Fractional a => Unit DPressure a joule :: Fractional a => Unit DEnergy a watt :: Fractional a => Unit DPower a coulomb :: Fractional a => Unit DElectricCharge a volt :: Fractional a => Unit DElectricPotential a farad :: Fractional a => Unit DCapacitance a ohm :: Fractional a => Unit DElectricResistance a siemens :: Fractional a => Unit DElectricConductance a weber :: Fractional a => Unit DMagneticFlux a tesla :: Fractional a => Unit DMagneticFluxDensity a henry :: Fractional a => Unit DInductance a lumen :: Fractional a => Unit DLuminousFlux a lux :: Fractional a => Unit DIlluminance a degreeCelsius :: Num a => Unit DCelsiusTemperature a fromDegreeCelsiusAbsolute :: Fractional a => a -> ThermodynamicTemperature a toDegreeCelsiusAbsolute :: Fractional a => ThermodynamicTemperature a -> a becquerel :: Fractional a => Unit DActivity a gray :: Fractional a => Unit DAbsorbedDose a sievert :: Fractional a => Unit DDoseEquivalent a hour :: Num a => Unit DTime a day :: Num a => Unit DTime a minute :: Num a => Unit DTime a arcminute :: Floating a => Unit DPlaneAngle a arcsecond :: Floating a => Unit DPlaneAngle a degree :: Floating a => Unit DPlaneAngle a minuteOfArc :: Floating a => Unit DPlaneAngle a secondOfArc :: Floating a => Unit DPlaneAngle a degreeOfArc :: Floating a => Unit DPlaneAngle a liter :: Fractional a => Unit DVolume a litre :: Fractional a => Unit DVolume a metricTon :: Fractional a => Unit DMass a tonne :: Fractional a => Unit DMass a module Numeric.Units.Dimensional.Prelude -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.NonSI electronVolt :: Fractional a => Unit DEnergy a unifiedAtomicMassUnit :: Fractional a => Unit DMass a gee :: Fractional a => Unit DAcceleration a foot :: Fractional a => Unit DLength a inch :: Fractional a => Unit DLength a ounce :: Fractional a => Unit DMass a poundMass :: Fractional a => Unit DMass a poundForce :: Fractional a => Unit DForce a psi :: Fractional a => Unit DPressure a mile :: Fractional a => Unit DLength a nauticalMile :: Fractional a => Unit DLength a yard :: Fractional a => Unit DLength a revolution :: Floating a => Unit DOne a solid :: Floating a => Unit DOne a teaspoon :: Fractional a => Unit DVolume a century :: Num a => Unit DTime a year :: Num a => Unit DTime a bar :: Fractional a => Unit DPressure a atmosphere :: Fractional a => Unit DPressure a technicalAtmosphere :: Fractional a => Unit DPressure a mmHg :: Fractional a => Unit DPressure a torr :: Fractional a => Unit DPressure a rad :: Fractional a => Unit DAbsorbedDose a -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.Extensible data DExt a n d showDExt :: (NumType n, Show d) => String -> DExt a n d -> String instance (Div n x n', Root d x d') => Root (DExt a n d) x (DExt a n' d') instance (Mul n x n', Pow d x d') => Pow (DExt a n d) x (DExt a n' d') instance (Sum n'' n' n, Div d d' d'', DropZero (DExt a n'' d'') d''') => Div (DExt a n d) (DExt a n' d') d''' instance (Div (Dim l m t i th n j) d d', Negate x x') => Div (Dim l m t i th n j) (DExt a x d) (DExt a x' d') instance Div d (Dim l m t i th n j) d' => Div (DExt a x d) (Dim l m t i th n j) (DExt a x d') instance (Sum n n' n'', Mul d d' d'', DropZero (DExt a n'' d'') d''') => Mul (DExt a n d) (DExt a n' d') d''' instance Mul (Dim l m t i th n j) d d' => Mul (Dim l m t i th n j) (DExt a x d) (DExt a x d') instance Mul d (Dim l m t i th n j) d' => Mul (DExt a x d) (Dim l m t i th n j) (DExt a x d') instance DropZero (DExt a (Neg n) d) (DExt a (Neg n) d) instance DropZero (DExt a (Pos n) d) (DExt a (Pos n) d) instance DropZero (DExt a Zero (DExt a' n d)) (DExt a Zero (DExt a' n d)) instance DropZero (DExt a Zero (Dim l m t i th n j)) (Dim l m t i th j j) -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.CGS data CGSDim lh mh t type DLength = CGSDim Pos2 Zero Zero type DMass = CGSDim Zero Pos2 Zero type DTime = CGSDim Zero Zero Pos1 type DElectricCurrent = CGSDim Pos3 Pos1 Neg2 type DCharge = CGSDim Pos3 Pos1 Neg1 meter :: Num a => Unit DLength a gram :: Num a => Unit DMass a second :: Num a => Unit DTime a ampere :: Floating a => Unit DElectricCurrent a franklin :: Floating a => Unit DCharge a unit_SI :: Num a => Quantity (Dim l m t i th n j) a -> Unit (Dim l m t i th n j) a unit_CGS :: (Floating a, Mul Zero l Zero, Mul Pos2 l l2, Mul Zero m Zero, Mul Pos2 m m2, Mul Zero t Zero, Mul Pos1 t t, Sum l2 Zero l2, Sum Zero m2 m2, Sum m2 Zero m2, Sum Zero t t, Mul Pos3 i il, Mul Pos1 i i, Mul Neg2 i it, Sum l2 il l', Sum m2 i m', Sum t it t') => Quantity (Dim l m t i Zero Zero Zero) a -> Unit (CGSDim l' m' t') a toSI :: (Floating a, Mul Zero l Zero, Mul Pos2 l l2, Mul Zero m Zero, Mul Pos2 m m2, Mul Zero t Zero, Mul Pos1 t t, Sum l2 Zero l2, Sum Zero m2 m2, Sum m2 Zero m2, Sum Zero t t, Mul Pos3 i il, Mul Pos1 i i, Mul Neg2 i it, Sum l2 il l', Sum m2 i m', Sum t it t') => Quantity (CGSDim l' m' t') a -> Quantity (Dim l m t i Zero Zero Zero) a instance (NumType lh, NumType mh, NumType t) => Show (CGSDim lh mh t) instance (Div lh x lh', Div mh x mh', Div t x t') => Root (CGSDim lh mh t) x (CGSDim lh' mh' t') instance (Mul lh x lh', Mul mh x mh', Mul t x t') => Pow (CGSDim lh mh t) x (CGSDim lh' mh' t') instance (Sum lh lh' lh'', Sum mh mh' mh'', Sum t t' t'') => Div (CGSDim lh'' mh'' t'') (CGSDim lh' mh' t') (CGSDim lh mh t) instance (Sum lh lh' lh'', Sum mh mh' mh'', Sum t t' t'') => Mul (CGSDim lh mh t) (CGSDim lh' mh' t') (CGSDim lh'' mh'' t'')