Difference between revisions of "Unsafe functions"
Jump to navigation
Jump to search
m |
m |
||
Line 1: | Line 1: | ||
<div style="border-left:1px solid lightgray; padding: 1em" alt="blockquote"> |
<div style="border-left:1px solid lightgray; padding: 1em" alt="blockquote"> |
||
− | I think <code>unsafePerformIO</code> might actually be a pretty good alternative, we just need to understand how to use it safely [...] |
||
+ | A colleague [...] asked me today whether I know how to use <code>unsafePerformIO</code> safely. And I realized I have no idea. |
||
⚫ | |||
+ | |||
⚫ | |||
</div> |
</div> |
||
Line 18: | Line 19: | ||
Unsafe functions can break type safety (unsafeCoerce#, unsafePerformIO), |
Unsafe functions can break type safety (unsafeCoerce#, unsafePerformIO), |
||
− | interfere with lazy IO (unsafeInterleaveIO), or break [http://en.wikipedia.org/wiki/Parametricity parametricity] (seq). |
+ | interfere with lazy IO (unsafeInterleaveIO), or break [http://en.wikipedia.org/wiki/Parametricity parametricity] (<code>seq</code>). |
− | Their use (except in the case of < |
+ | Their use (except in the case of <code>seq</code>) would require some |
kind of assurance on the part of the programmer that what they're doing |
kind of assurance on the part of the programmer that what they're doing |
||
is safe. |
is safe. |
||
<code>unsafe</code> is also a keyword which can be used in a [http://haskell.org/haskellwiki/Performance/FFI foreign import declaration]. |
<code>unsafe</code> is also a keyword which can be used in a [http://haskell.org/haskellwiki/Performance/FFI foreign import declaration]. |
||
+ | |||
{{stub}} |
{{stub}} |
Revision as of 05:44, 11 August 2022
A colleague [...] asked me today whether I know how to use unsafePerformIO
safely. And I realized I have no idea.
There are a number of unsafe functions in the libraries.
unsafePerformIO :: IO a -> a
unsafeInterleaveIO :: IO a -> IO a
unsafeInterleaveST :: ST s a -> ST s a
unsafeIOToST :: IO a -> ST s a
unsafeIOToSTM :: IO a -> STM a
unsafeFreeze, unsafeThaw
unsafeCoerce# :: a -> b
seq :: a -> b -> b
Unsafe functions can break type safety (unsafeCoerce#, unsafePerformIO),
interfere with lazy IO (unsafeInterleaveIO), or break parametricity (seq
).
Their use (except in the case of seq
) would require some
kind of assurance on the part of the programmer that what they're doing
is safe.
unsafe
is also a keyword which can be used in a foreign import declaration.
This article is a stub. You can help by expanding it.