diff --git a/Changelog b/Changelog
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,6 @@
+Changed in version 0.4.1.5:
+- Use CAPI for `tparm` to fix behavior on Apple Silicon (#41).
+
 Changed in version 0.4.1.4:
 
 - Bump the upper bound to allow `base-4.13` (`ghc-8.8`).
diff --git a/System/Console/Terminfo/Base.hs b/System/Console/Terminfo/Base.hs
--- a/System/Console/Terminfo/Base.hs
+++ b/System/Console/Terminfo/Base.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CApiFFI #-}
 {-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE ScopedTypeVariables #-}
@@ -70,6 +71,10 @@
 -- | Initialize the terminfo library to the given terminal entry.
 -- 
 -- Throws a 'SetupTermError' if the terminfo database could not be read.
+--
+-- *Note:* @ncurses@ is not thread-safe; initializing or using multiple
+-- 'Terminal's in different threads at the same time can result in memory
+-- unsafety.
 setupTerm :: String -> IO Terminal
 setupTerm term =
     withCString term $ \c_term ->
@@ -259,8 +264,8 @@
 
 
                     
-foreign import ccall tparm ::
-    CString -> CLong -> CLong -> CLong -> CLong -> CLong -> CLong 
+foreign import capi "term.h tparm"
+    tparm :: CString -> CLong -> CLong -> CLong -> CLong -> CLong -> CLong
     -> CLong -> CLong -> CLong -- p1,...,p9
     -> IO CString
 
diff --git a/terminfo.cabal b/terminfo.cabal
--- a/terminfo.cabal
+++ b/terminfo.cabal
@@ -1,6 +1,6 @@
 Name:           terminfo
 Cabal-Version:  >=1.10
-Version:        0.4.1.4
+Version:        0.4.1.5
 Category:       User Interfaces
 License:        BSD3
 License-File:   LICENSE
@@ -28,7 +28,7 @@
     other-extensions: CPP, DeriveDataTypeable, FlexibleInstances, ScopedTypeVariables
     if impl(ghc>=7.3)
       other-extensions: Safe, Trustworthy
-    build-depends:    base >= 4.9 && < 4.14
+    build-depends:    base >= 4.9 && < 4.17
     ghc-options:      -Wall
     exposed-modules:
                     System.Console.Terminfo
