История изменений
Исправление qnikst, (текущая версия) :
{-# LANGUAGE RankNTypes #-}
data T = TI Int
| TF Float
| TS String
foo :: T -> (forall a . (a -> String) -> a -> String) -> String
foo (TI x) printerf = printerf show x
foo (TF x) printerf = printerf show x
foo (TS x) printerf = printerf id x
можешь не благорадить. Вот это то, что ты хотел сделать.
*Main> foo (TI 1) ($)
"1"
*Main> foo (TF 0.5) ($)
"0.5"
*Main> foo (TS "yo!") ($)
"yo!"
правда мой мозг отказывается понимать зачем тебе нужна такая конструкция..
Исправление qnikst, :
{-# LANGUAGE RankNTypes #-}
data T = TI Int
| TF Float
| TS String
foo :: T -> (forall a . (a -> String) -> a -> String) -> String
foo (TI x) printerf = printerf show x
foo (TF x) printerf = printerf show x
foo (TS x) printerf = printerf id x
можешь не благорадить. Вот это то, что ты хотел сделать.
*Main> foo (TI 1) (\f y -> f y)
"1"
*Main> foo (TF 0.5) (\f y -> f y)
"0.5"
*Main> foo (TS "yo!") (\f y -> f y)
"yo!"
правда мой мозг отказывается понимать зачем тебе нужна такая конструкция..
Исправление qnikst, :
{-# LANGUAGE RankNTypes #-}
data T = TI Int
| TF Float
| TS String
foo :: T -> (forall a . (a -> String) -> a -> String) -> String
foo (TI x) printerf = printerf show x
foo (TF x) printerf = printerf show x
foo (TS x) printerf = printerf id x
можешь не благорадить. Вот это то, что ты хотел сделать.
*Main> foo (TI 1) (\f y -> f y)
"1"
*Main> foo (TF 0.5) (\f y -> f y)
"0.5"
правда мой мозг отказывается понимать зачем тебе нужна такая конструкция..
Исходная версия qnikst, :
{-# LANGUAGE RankNTypes #-}
data T = TI Int
| TF Float
| TS String
foo :: T -> (forall a . (a -> String) -> a -> String) -> String
foo (TI x) printerf = printerf show x
foo (TF x) printerf = printerf show x
foo (TS x) printerf = printerf id x
можешь не благорадить. Вот это то, что ты хотел сделать.