diff --git a/src/func.rs b/src/func.rs
index 1daf001..8b085d4 100644
--- a/src/func.rs
+++ b/src/func.rs
@@ -13,7 +13,7 @@ mod controlflow;
 pub mod derivations;
 mod extensions;
 pub mod instances;
-mod shared;
+pub mod shared;
 #[cfg(test)]
 pub mod test_suite;
 #[cfg(test)]
@@ -29,7 +29,6 @@ pub use self::controlflow::{Iterative, IterativeWrapped};
 pub use self::extensions::{MonadExt, MonadFailAnyExt};
 #[cfg(doc)]
 use self::instances::stackless::StacklessInstance;
-pub use self::shared::{SharedFunctor, SharedFunctorAny};
 
 pub trait WeakFunctorAny {
     /// Type of the wrapped value.
diff --git a/src/func/instances/composition.rs b/src/func/instances/composition.rs
index 012bca6..fd52493 100644
--- a/src/func/instances/composition.rs
+++ b/src/func/instances/composition.rs
@@ -6,7 +6,7 @@
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 pub struct CompositionInstance<U, V>(U, V);
 
diff --git a/src/func/instances/effect.rs b/src/func/instances/effect.rs
index 0817e17..7524627 100644
--- a/src/func/instances/effect.rs
+++ b/src/func/instances/effect.rs
@@ -6,7 +6,7 @@
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 /// Metadata type.
 pub trait Effect {
diff --git a/src/func/instances/future.rs b/src/func/instances/future.rs
index 039ac7f..70be8bb 100644
--- a/src/func/instances/future.rs
+++ b/src/func/instances/future.rs
@@ -14,7 +14,7 @@ use futures::{
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 pub struct FutureInstance;
 
diff --git a/src/func/instances/lazy.rs b/src/func/instances/lazy.rs
index 9e7f0d3..97ad3cc 100644
--- a/src/func/instances/lazy.rs
+++ b/src/func/instances/lazy.rs
@@ -11,7 +11,7 @@ use std::{cell::RefCell, rc::Rc};
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 pub struct LazyInstance;
 
diff --git a/src/func/instances/option.rs b/src/func/instances/option.rs
index 1606382..297d1e5 100644
--- a/src/func/instances/option.rs
+++ b/src/func/instances/option.rs
@@ -11,7 +11,7 @@
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 #[derive(SharedFunctorAny)]
 pub struct OptionInstance;
diff --git a/src/func/instances/overload.rs b/src/func/instances/overload.rs
index b403436..5813d8f 100644
--- a/src/func/instances/overload.rs
+++ b/src/func/instances/overload.rs
@@ -8,7 +8,7 @@ use std::marker::PhantomData;
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 pub struct OverloadInstance<T, O>(T, O);
 
diff --git a/src/func/instances/result.rs b/src/func/instances/result.rs
index 4d0ef84..d891743 100644
--- a/src/func/instances/result.rs
+++ b/src/func/instances/result.rs
@@ -11,7 +11,7 @@
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 #[derive(SharedFunctorAny)]
 pub struct ResultInstance<E>(E);
diff --git a/src/func/instances/solo.rs b/src/func/instances/solo.rs
index 3cf8677..b278c0b 100644
--- a/src/func/instances/solo.rs
+++ b/src/func/instances/solo.rs
@@ -6,7 +6,7 @@
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 #[derive(SharedFunctorAny)]
 pub struct SoloInstance;
diff --git a/src/func/instances/tryfuture.rs b/src/func/instances/tryfuture.rs
index 2d45ac4..4907da6 100644
--- a/src/func/instances/tryfuture.rs
+++ b/src/func/instances/tryfuture.rs
@@ -13,7 +13,7 @@ use futures::{
 
 #[cfg(doc)]
 use crate::func::instances::*;
-use crate::func::*;
+use crate::func::{shared::*, *};
 
 pub struct TryFutureInstance<E>(E);