existantial types / attempt of using an unObj function/ no type in ghci

Marc Weber marco-oweber at gmx.de
Tue May 9 17:29:45 EDT 2006


My ghc version: Glasgow Haskell Compiler, Version 6.5.20060117, for Haskell 98, compiled by GHC version 6.5.20060117

load this into ghci 

	module Main where

	class Table t where
	  tableName :: t ->  String
	data TableObj = forall f. (Table f) => TableObj { unObj::f }
	instance Table TableObj where
	  tableName (TableObj t) = tableName t

and do :t unObj

result :
    marc@(none) ~/projects/haskell/HTTF/Font/TTF $ ghci -fglasgow-exts 
       ___         ___ _
      / _ \ /\  /\/ __(_)
     / /_\// /_/ / /  | |      GHC Interactive, version 6.5.20060117, for Haskell 98.
    / /_\\/ __  / /___| |      http://www.haskell.org/ghc/
    \____/\/ /_/\____/|_|      Type :? for help.

    Loading package base-1.0 ... linking ... done.
    Prelude> :l Table.hs 
    [1 of 1] Skipping  Font.TTF.Table   ( Table.hs, Table.o )
    Ok, modules loaded: Font.TTF.Table.
    Prelude Font.TTF.Table> :t unObj

    <interactive>:1:0:
	Can't find interface-file declaration for TableObj
	  Probable cause: bug in .hi-boot file, or inconsistent .hi file
	  Use -ddump-if-trace to get an idea of which file caused the error

I got to this while trying to simplify from 1 to 1'
which doesn't work of cause.

1,2 should only call the show and mappingFormat function of the Table class.
 
data MappingObj=forall f. (Typeable f, Mapping f) => MappingObj f
  deriving (Typeable)

instance Mapping MappingObj where
  mappingFormat (MappingObj mobj) = mappingFormat mobj  -- 1
instance Show MappingObj where
  show (MappingObj obj) = show obj                     -- 2
 
instance Mapping MappingObj where
  mappingFormat = mappingFormat.unObj   -- 1'
instance Show MappingObj where
  show = show.unObj                    -- 2'
unObj (MappingObj obj) = obj

Wouldn't it be nice to just type this ?
data MappingObj=forall f. (Typeable f, Mapping f) => MappingObj f
  deriving (Typeable, Table, Show)

Marc

PS: It's nice to see such a good error message!



More information about the Glasgow-haskell-bugs mailing list