Hi Alberto, Those are good questions, I've added some examples which hopefully clarify the situation. Input and output of vectors is not a strong point of the library, but I don't think there is a good alternative to the way I do it.
http://ofb.net/~frederik/futility/src/Vector/read-example.hs (also, your example exposed some missing functionality. I've added three new functions; in addition to listMat, now there are listMatCol, listMatRow, and listMatSquare. Hopefully these should cover almost all use cases. http://ofb.net/~frederik/futility/src/Vector/Base.hs ) By the way, here is how I would download and run the thing, although you seem to have figured it out: $ wget http://ofb.net/~frederik/futility/futility-devel.tar.gz $ tar -xvzf futility-devel.tar.gz $ cd futility-devel/ $ ghc -fth --make Vector/read-example.hs -o read-example $ ./read-example <# 11.0, 23.0; 14.0, 30.0; 15.0, 33.0; 18.0, 40.0 #> <1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0> <1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0> <# 1.0, 5.0; 2.0, 6.0; 3.0, 6.0; 4.0, 7.0 #> <# 11.0, 23.0; 14.0, 30.0; 15.0, 33.0; 18.0, 40.0 #> <# -3.0, -5.0; -5.0, -7.0 #> <# 7.0, 10.0; 15.0, 22.0 #> As for your questions: > Vector/examples.hs:35:11: > GHC stage restriction: `x' > is used in a top-level splice, and must be imported, not defined locally > In the first argument of `dAM', namely `x' > In the definition of `m1': m1 = $[splice](dAM x) This is a shortcoming of Template Haskell - it will not let you call a function from a splice if that function is defined in the same file as the splice. It should be possible to remove this shortcoming, but I don't know what is planned. > m2 = listMat x This is not how listMat is used, see the example file above. listMat takes a list of lists and a function, and passes the matrix version of the list of lists to the function. > I would also like to create a matrix from a data file: See 'v3' in the example. Cheers, Frederik On Sun, Apr 16, 2006 at 05:06:55PM +0200, Alberto Ruiz wrote: > It is really counterintuitive! I will study carefully your library and the > "Implicit Configurations" paper. Using static dimension checking we can write > very solid code for matrix computations... > > However, I don't know how to write some definitions. For instance, this is ok: > > m = $(dAM [[1,2,3]]) > > but with: > > x = [[1,2,3]] :: [[Double]] > m1 = $(dAM x) > m2 = listMat x > > main = do > print m1 > print m2 > > I get: > > Vector/examples.hs:35:11: > GHC stage restriction: `x' > is used in a top-level splice, and must be imported, not defined locally > In the first argument of `dAM', namely `x' > In the definition of `m1': m1 = $[splice](dAM x) > > Vector/examples.hs:40:10: > Inferred type is less polymorphic than expected > Quantified type variable `m' escapes > Quantified type variable `n' escapes > Expected type: (v (L m, L n) -> w) -> t > Inferred type: (forall n1 m1. > (ReflectNum n1, ReflectNum m1) => > v (L m1, L n1) -> w) > -> w > In the first argument of `print', namely `m2' > In the result of a 'do' expression: print m2 > > > I would also like to create a matrix from a data file: > > main = do > let m1 = $(dAM [[1,2],[3,4::Double]]) > s <- readFile "data.txt" > let list = read s :: [[Double]] > --let m2 = $(dAM list) > let m2 = listMat list > print $ m2 *> trans m1 > > But I get a similar error. Perhaps I must provide information about the > expected dimensions, but I don't know how to do it. > > -- > Alberto > > On Saturday 15 April 2006 22:09, Frederik Eaton wrote: > > Yes, certainly... Otherwise the library would not be much use! If it > > seems counterintuitive, as it did to me at first, you should check out > > the "Implicit Configurations" paper, which uses modular arithmetic as > > an example. My version of their code is in > > > > http://ofb.net/~frederik/futility/src/Prepose.hs > > > > The function I mainly use is: > > > > reifyIntegral :: Integral a => a -> (forall s. ReflectNum s => s -> w) -> w > > > > which turns an integral value into a type of the ReflectNum class > > which represents that value, and calls the provided polymorphic > > function with a dummy value (actually 'undefined') of that type; then > > returning the function's result. > > > > Frederik > > > > On Sat, Apr 15, 2006 at 06:14:44PM +0200, Alberto Ruiz wrote: > > > On Friday 14 April 2006 17:02, Frederik Eaton wrote: > > > > An index-aware linear algebra library in Haskell > > > > > > Excellent work! > > > > > > Is it possible to create a vector or matrix whose size is not known at > > > compile time? > > > > -- http://ofb.net/~frederik/ _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe