[Haskell-cafe] Re: Debugging methods for haskell
wren ng thornton
wren at freegeek.org
Sat Jul 18 19:40:41 EDT 2009
Fernan Bolando wrote:
> The intention is z0 is a system parameter and database, it contains a
> set of info needed to define a particular simulation
>
> it looks like ( [n,m...], [m,o,p])
>
> n is is a list info settings for the circuit analysis
> m is a list of statistics for the circuits that is need in sub-sequent
> calculation
> m is a list of circuit settings like temperature etc.
> o is a list of matrix solution for non-linear newton raphson
> p is a list of matrix solution for time dependent calculations
This would be better as,
data SystemParameterDatabase = SystemParameterDatabase
{ infoSettings :: InfoSettings
, statistics :: Statistics
, settings :: Settings
, nlnr :: [Matrix Double]
, timeDependent :: [Matrix Double]
}
data InfoSettings = InfoSettings
{ pMSET :: MSET
, aSetting :: A
, bSetting :: B
...
}
data Statistics = Statistics
{ aStatistic :: A
, anotherStatistic :: A
, bStatistic :: B
...
}
data Settings = Settings
{ temperature :: Kelvin
, etc :: Etc
}
...
A single-constructor ADT, especially with the labeled-fields syntax, is
pretty close to C structs; no need to reinvent them and give yourself
headaches.
Really, the only thing you should be using lists for is a
variable-length sequence of elements drawn from the same type and
distinguished only by their position in the sequence. Whenever the
length is fixed or the (semantic) type of elements can be distinguished
from one another (or altered by pushing/popping the list), then a list
is not what you want to be using because it doesn't capture the
intention of the type (and therefore allows unintelligible values of the
type, and inappropriate transformations on the type).
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list