content: {-# LANGUAGE MagicHash #-}
  -- !! worker/wrapper turns ( \ <absent> -> Int# ) function
  -- !! into Int# -- WRONG
  
  --import PrelBase --ghc1.3
  import GHC.Base
  
  main = putStr (shows true_or_false "\n")
    where
      true_or_false
        = case (cmp_name True imp1 imp2) of
            -1# -> False
            0#  -> True
            1#  -> False
  
      imp1 = Imp s "Imp1" s s
      imp2 = Imp s "Imp2" s s
  
      s = "String!"
  
  -- taken from compiler: basicTypes/ProtoName.lhs
  
  cmp_name :: Bool -> ProtoName -> ProtoName -> Int#
  
  cmp_name by_local (Unk n1) (Unk n2)        = cmpString n1 n2
  cmp_name by_local (Unk n1) (Imp m n2 _ o2) = cmpString n1 (if by_local then o2 else n2)
  cmp_name by_local (Unk n1) (Prel nm)
    =  let  (_, n2) = getOrigName nm  in
       cmpString n1 n2
  
  cmp_name by_local (Prel n1) (Prel n2) = cmpName n1 n2
  
  cmp_name True  (Imp _ _ _ o1) (Imp _ _ _ o2) = cmpString o1 o2
  
  cmp_name False (Imp m1 n1 _ _) (Imp m2 n2 _ _)
    = case cmpString n1 n2 of {
        -1# -> -1#;
        0# -> case cmpString m1 m2 of {
                 0# -> 0#;
                 xxx -> if null m1 || null m2
                        then 0#
                        else xxx
               };
        _ -> 1#
      }
  
  cmp_name True (Imp _ _ _ o1) (Prel nm)
    = let
          (_, n2) = getOrigName nm
      in
      cmpString o1 n2
  
  cmp_name False (Imp m1 n1 _ _) (Prel nm)
    = case getOrigName nm   of { (m2, n2) ->
      case cmpString n1 n2 of { -1# -> -1#; 0# -> cmpString m1 m2; _ -> 1# }}
  
  cmp_name by_local other_p1 other_p2
    = case cmp_name by_local other_p2 other_p1 of -- compare the other way around
        -1#  -> 1#
        0#  -> 0#
        _ -> -1#
  
  data ProtoName
    = Unk         String  -- local name in module
  
    | Imp         String  -- name of defining module
                  String  -- name used in defining name
                  String  -- name of the module whose interface told me
                          -- about this thing
                  String  -- occurrence name
  
    | Prel        String{-Name-}
  
  cmpString, cmpName :: String -> String -> Int#
  cmpString a b = 0#
  cmpName = cmpString
  
  getOrigName :: String -> (String, String)
  getOrigName x = ("MODULE", x)
  