Aşağıdaki işlevi aldığımı varsayalım: Haskell: Bir fonksiyonun dönüş tipini fonksiyonun içinden çıkarmanın bir yolu var mı?
import Data.Typeable
import Text.Read (reads)
parse :: (Read b, Typeable b) => String -> IO b
parse msg = case reads msg of
[(value,"")] -> return value
_ -> throwIO $ ErrorCall ("could not parse " ++ msg)
İstediğim her şeyi bir String’i ayrıştırır. Dize hatalı biçimlendirilmişse, bu iletiyi ayrıştıramayan bir istisna atar. Bu işlevi IO-Monad'ın yaptığı gibi bir blokta kullanırım.
(a,b) <- parse msg :: IO (Int,Int)
benzeri ve
s <- parse msg :: IO String
gibi başka yerde IO-Monad bir do bloğunda bu işlevi kullanın Bu yazıyı okuyan bir şey nasıl alabilirim, b türü var mı?
Geçici bir bu
import Data.Typeable
import Text.Read (reads)
parse :: (Read b, Typeable b) => b -> String -> IO b
parse dummy msg = case reads msg of
[(value,"")] -> return value
_ -> throwIO $ ErrorCall ("could not parse " ++ msg ++ " as " ++
show (typeOf dummy))
yapıyor ve
s <- parse "" msg :: IO String
gibi çağırma Ama bu oldukça saçma görünüyor olacaktır.
İşlevsel işlevden bir işlevin dönüş türünü çıkarmanın bir yolu var mı?
Ayrıca: İstendiğinde belirli bir tür * değerlerini * döndürmek isterseniz ve işlenmemiş bir dönüş türü istendiğinde bir hata varsa ne olur? – Evi1M4chine