{-# LANGUAGE FunctionalDependencies #-}

module Main where

-- | Something.
class Foo a b | a -> b

class Bar a b | a -> b, b -> a where bar :: a

-- | Something else.
class
    Baz a b c d
        | a b -> c d -- Foo
        , b c -> a d -- Bar
        , a c -> b d -- Baz
        , a c d -> b
        , a b d -> a b c d
    where
    baz :: a -> b
