{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE Safe #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -Wno-orphans #-} {-# OPTIONS_HADDOCK show-extensions #-} -- | -- Copyright : Kazuki Okamoto -- License : see LICENSE -- Maintainer : kazuki.okamoto@kakkun61.com -- Stability : experimental -- Portability : GHC -- -- List-like operations for 'Data.Tuple.OneTuple.OneTuple'. module Data.Tuple.List.OneTuple () where #if MIN_VERSION_OneTuple(0,3,0) #if !MIN_VERSION_base(4,15,0) import Prelude () import Data.Tuple.List (Cons, HasAt, HasCons, HasHead, HasInit, HasLast, HasLength, HasReverse, HasTail, HasUncons, Head, Init, Last, Length, Reverse, Tail, type (!!)) import Data.Tuple.Solo (Solo) -- 1 type instance Cons a () = Solo a type instance Head (Solo a) = a type instance Tail (Solo a) = () type instance Init (Solo a) = () type instance Last (Solo a) = a type instance Length (Solo a) = 1 instance HasHead (Solo a) instance HasTail (Solo a) instance HasInit (Solo a) instance HasLast (Solo a) instance HasCons a () instance HasUncons (Solo a) instance HasLength (Solo a) type instance Reverse (Solo a) = Solo a instance HasReverse (Solo a) type instance (Solo a) !! 0 = a instance HasAt (Solo a) 0 -- 2 type instance Cons a (Solo b) = (a, b) type instance Tail (a, b) = Solo b type instance Init (a, b) = Solo a instance HasTail (a, b) instance HasInit (a, b) instance HasCons a (Solo b) instance HasUncons (a, b) #endif #else import Prelude () import Data.Tuple.List (Cons, HasAt, HasCons, HasHead, HasInit, HasLast, HasLength, HasReverse, HasTail, HasUncons, Head, Init, Last, Length, Reverse, Tail, type (!!)) import Data.Tuple.OneTuple (OneTuple) -- 1 type instance Cons a () = OneTuple a type instance Head (OneTuple a) = a type instance Tail (OneTuple a) = () type instance Init (OneTuple a) = () type instance Last (OneTuple a) = a type instance Length (OneTuple a) = 1 instance HasHead (OneTuple a) instance HasTail (OneTuple a) instance HasInit (OneTuple a) instance HasLast (OneTuple a) instance HasCons a () instance HasUncons (OneTuple a) instance HasLength (OneTuple a) type instance Reverse (OneTuple a) = OneTuple a instance HasReverse (OneTuple a) type instance (OneTuple a) !! 0 = a instance HasAt (OneTuple a) 0 -- 2 type instance Cons a (OneTuple b) = (a, b) type instance Tail (a, b) = OneTuple b type instance Init (a, b) = OneTuple a instance HasTail (a, b) instance HasInit (a, b) instance HasCons a (OneTuple b) instance HasUncons (a, b) #endif