[Haskell-cafe] And another basic typing question -- empty list
Adam Wyner
adam at wyner.info
Fri Sep 16 10:02:44 EDT 2005
Hi,
I have some questions about using the empty list in Hugs. In June 2001,
this
was raised as a bug in hugs (see Hugs-Bugs Archives). References
therein to
a bug list on S. Thompson's pages come up a dead end. I haven't found
any follow
up or solution to this discussed. I would particularly like to use an
empty list
in the Trex module of Hugs.
Suppose I have two expressions:
emptyListA = null
emptyListB = []
emptyListA is apparently a function from empty lists to Bool.
I would have thought that emptyListB would just be the empty
list and output it as such.
> :t emptyListA
emptyListA :: [a] -> Bool
> emptyListA []
True
The problem is that there is no "show" function for
emptyListB, which is just []
> emptyListB
ERROR - Cannot find "show" function for:
*** Expression : emptyListB
*** Of type : [a]
What I would like, simply is:
>emptyListB
[]
More to my purpose, I would like to use the empty list as a value
of a record in Trex. For instance, while the first example below
gives a good result, the second example has no "show" function.
Looking at the Trex module, it would seem that there is a show
function for the empty list (?? but frankly, I have never touched
this area of haskell, so I haven't given it much thought).
Sample command line I/O.
> (a = 'a', b = [2])
(a = 'a', b = [2])
> (a = 'a', b = [])
ERROR - Cannot find "show" function for:
*** Expression : (a = 'a', b = [])
*** Of type : Rec (a :: Char, b :: [a])
Clearly, the problem is the empty list labelled b.
What I want is the following sort of result:
> (a = 'a', b = [])
(a = 'a', b = [])
Further along, what I want is to have values for the field labelled b
to be lists which contain something. So, in one case, the value is
[], while in another it is [2], say. Moreover, I want to define
a type which has a label with values of type lists. That is, I want to
have
a record something like Rec (a :: Char, b :: List).
However, List is not a basic data type. And in any case, the values of
labels
cannot show empty lists. I'm unsure whether Trex or any record type can
handle this.
Here are some examples.
The following is OK.
type TestList01 = Rec (a :: Char, b :: [Char])
testList01 :: TestList01
testList01 = (a = 'a', b = "b")
Input and output are:
> testList01
(a = 'a', b = "b")
ComplexActions01> :t (a = 'a', b = "b")
(a = 'a', b = "b") :: Rec (a :: Char, b :: [Char])
But the following type is uninterpretable:
type TestList02 = Rec (a :: Char, b :: [])
ERROR "ComplexActions01.lhs":196 - Illegal type "[]" in constructor
application.
Suggestions about how to treat empty lists?
Thanks,
Adam Wyner
More information about the Haskell-Cafe
mailing list