Skip to content

Core Lint error

This piece of code fails when run with ghci -ignore-dot-ghci -fdefer-type-errors -dcore-lint bug.hs, maybe same as my previous #14584 (closed).

{-# Language DerivingStrategies #-}
{-# Language GeneralizedNewtypeDeriving #-}
{-# Language InstanceSigs #-}
{-# Language KindSignatures #-}
{-# Language PolyKinds #-}
{-# Language ScopedTypeVariables #-}
{-# Language TypeApplications #-}
{-# Language TypeFamilies #-}
{-# Language TypeInType #-}
{-# Language TypeOperators #-}
{-# Language UndecidableInstances #-}

import Data.Kind
import Data.Functor.Identity
import Data.Functor.Product

type a <-> b = a -> b -> Type

class Iso (iso :: a <-> b) where
  iso :: a -> b
  osi :: b -> a

data Iso_Bool :: Either () () <-> Bool

instance Iso Iso_Bool where

class Representable f where
  type Rep f :: Type

  index    :: f a -> (Rep f -> a)
  tabulate :: (Rep f -> a) -> f a

class Comonad w where
  extract   :: w a -> a
  duplicate :: w a -> w (w a)

newtype Co f a = Co (f a) deriving newtype (Functor, Representable)

instance (Representable f, Monoid (Rep f)) => Comonad (Co f) where
  extract = (`index` mempty)

newtype WRAP (iso::old <-> new) f a = WRAP (f a)

instance (Representable f, Rep f ~ old, Iso iso) => Representable (WRAP (iso :: old <-> new) f) where
  type Rep (WRAP (iso :: old <-> new) f) = new

  index :: WRAP iso f a -> (new -> a)
  index (WRAP fa) = index fa . osi @old @new @iso

  tabulate :: (new -> a) -> WRAP iso f a
  tabulate gen = WRAP $ 
    tabulate (gen . iso @old @new @iso)

newtype PAIR a = PAIR (Co (WRAP Iso_Bool (Product Identity Identity)) a)
  deriving newtype
    Comonad 

I unfortunately don't have time to find a more minimal example. Core linter vomits a lot of errors on 8.2.1 & 8.3.20171208.

Trac metadata
Trac field Value
Version 8.2.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information